我使用丰富的0.9.2并且我对Exclusive类有问题。我需要,如果没有任何键,它应该给出一个错误。然而,这是好的。这是一个妖娆的错误吗?如果没有,我怎么能为此编写脚本?
为了澄清我的问题,假设我们构建了一个类似的模式:
schema = Schema({Exclusive('a', 'z'): int, Exclusive('b', 'z'): int, 'c': int}, required=True)
我需要给出排除组中的一个且只有一个键。
但是,当我使用{'c': 5}
进行测试时,即使我没有给出a
或b
,它似乎也是有效的。
我不知道如何使它适用于这种情况。
答案 0 :(得分:1)
根据documentation,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)
答案 1 :(得分:1)
这里有效的技巧是使用两个需要同时验证的不同模式:
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
。