首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用cerberus验证布尔值

在Python中使用cerberus验证布尔值
EN

Stack Overflow用户
提问于 2017-01-17 14:16:54
回答 2查看 3.4K关注 0票数 2

我试图在Python中使用Cerberus来验证一些数据。

我发现对于布尔类型,验证器总是返回True,如下所示:

代码语言:javascript
复制
import cerberus
bool_schema = {'name': {'type': 'boolean', 'required': True}}
cerberus.schema_registry.add('bool_schema', bool_schema)

v = cerberus.Validator({'name': {'schema': 'bool_schema'}})
test1 = {'name': 'a'}
test2 = {'name': 0}
print(v.validate(test1))
print(v.validate(test2))

上面的代码打印两个Trues。

实际上,我需要验证的是值是True还是False (Python中的bool类型),其他值不应该通过验证器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-18 14:01:47

这是一个语义上的问题。虽然您没有明确指定要实现的目标,但我假设您希望测试在字典中映射到name的值是否为布尔值,并确保它的存在。

在示例代码的第4行中,您定义了一个模式,该模式引用了模式注册表中先前定义的模式。而验证将被解释为

代码语言:javascript
复制
{'name': 
    {'schema': {
       {'type': 'boolean',
        'required': True}
}}}

第二级schema规则将只处理是一个映射。在您的每个示例中,情况并非如此,这将有效地不处理任何规则,因此每次验证都返回True

为了回答我前面假设的问题,这将包括:

代码语言:javascript
复制
import cerberus
required_boolean = {'type': 'boolean', 'required': True}
cerberus.rules_set_registry.add('required_boolean', required_boolean)
v = cerberus.Validator({'name': 'required_boolean'})
票数 3
EN

Stack Overflow用户

发布于 2017-01-17 20:23:54

模式注册可能有问题(我打开了一个票证,以便我们可以进一步研究它-将在这里报告)。

同时,您可以跳过注册表,它将运行得很好:

代码语言:javascript
复制
from cerberus import Validator

schema = {'name': {'type': 'boolean', 'required': True}}

v = Validator()
v.validate({'name': 'a'})
False

v.errors
{'name': ['must be of boolean type']}

为未来的读者编辑:下面@funky的答案实际上解释了为什么您的代码失败,以及如何修复它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41699452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档