遗忘了Schema()后没有错误

时间:2019-07-07 15:40:36

标签: python voluptuous

根据示例,这是创建验证架构的正确方法:

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))

我检查了PORT1PORT2的类型是否不同。问题是PORT2对我来说效果很好,并且得到与正确的PORT1相同的结果。

我不知道我是否犯错。有人可以清楚地指出省略Schema(...)是否错误?为什么在没有Schema(...)的情况下效果如此之好,以至于我没有发现任何问题?

1 个答案:

答案 0 :(得分:2)

每个验证器都有一个在__call__中定义的validators。您可以在下面查看源代码

https://github.com/alecthomas/voluptuous/blob/master/voluptuous/validators.py#L279

所以即使有

PORT3 = vol.Range(min=0, max=65535)
PORT3(100)

这也将起作用。如您所说,PORT1PORT2是不同的对象,但是__call__方法是在所有validators以及从_WithSubValidators衍生的对象上定义的。

https://github.com/alecthomas/voluptuous/blob/2e557f71db6260e3ab40a6848a6bf4705d434f2d/voluptuous/validators.py#L184

Schema对象包装在这些验证器周围,以照此检查对象。

在您的情况下,由于您只验证单个字段或将它们与其他验证器组合在一起,因此它们会很好地工作

Working