我使用的是淫荡的0.9.2,我有排他性类的问题。我需要的是,如果没有键,它应该给出一个错误。然而,这对性感来说是可以的。这是一个臭虫的淫荡吗?如果不是,我该如何写一个脚本呢?
为了澄清我的问题,假设我们建立了这样一个模式:
schema = Schema({Exclusive('a', 'z'): int, Exclusive('b', 'z'): int, 'c': int}, required=True)
我需要一个且只能给出排除组中的一个键。但是当我用{'c': 5}
测试时,即使我没有给出a
或b
,它似乎也是有效的。我不知道如何使它特别适用于这种情况
根据文档,Exclusive
继承自Optional
,这意味着a
和b
在模式中是可选的;这就是为什么{'c': 5}
是一个有效的输入。要解决这个问题,您需要根据需要显式地指定它们:
from voluptuous import Schema, Exclusive, Required
schema = Schema({Required(Exclusive('a', 'z')): int, Required(Exclusive('b', 'z')): int, 'c': int}, required=True)
这里的一个技巧是使用两个需要同时验证的不同模式:
from voluptuous import All, Any, Exclusive, Required
schema = All(
{
Exclusive('a', 'z'): int,
Exclusive('b', 'z'): int,
Required('c'): int,
},
{
Required(Any('a', 'b')): int,
Required('c'): int,
},
)
当a
和b
同时存在时,第一个模式验证失败,当a
和b
都不存在时,第二个模式验证失败。因此,a
或b
必须存在。