根据示例,这是创建验证架构的正确方法:
import voluptuous as vol
PORT1 = vol.Schema(vol.All(int, vol.Range(min=0, max=65535)))
但是,我注意到我的某些验证器中缺少Schema
调用,例如:
PORT2 = vol.All(int, vol.Range(min=0, max=65535))
我检查了PORT1
和PORT2
的类型是否不同。问题是PORT2
对我来说效果很好,并且得到与正确的PORT1
相同的结果。
我不知道我是否犯错。有人可以清楚地指出省略Schema(...)
是否错误?为什么在没有Schema(...)
的情况下效果如此之好,以至于我没有发现任何问题?
答案 0 :(得分:2)
每个验证器都有一个在__call__
中定义的validators
。您可以在下面查看源代码
https://github.com/alecthomas/voluptuous/blob/master/voluptuous/validators.py#L279
所以即使有
PORT3 = vol.Range(min=0, max=65535)
PORT3(100)
这也将起作用。如您所说,PORT1
和PORT2
是不同的对象,但是__call__
方法是在所有validators
以及从_WithSubValidators
衍生的对象上定义的。
Schema
对象包装在这些验证器周围,以照此检查对象。
在您的情况下,由于您只验证单个字段或将它们与其他验证器组合在一起,因此它们会很好地工作