gpt4 book ai didi

python - 如何从未通过 Cerberus 验证的文档中删除字段?

转载 作者:行者123 更新时间:2023-11-28 22:23:40 24 4
gpt4 key购买 nike

我正在使用开源 Python 数据验证库 Cerberus验证字典的结构。我希望它获取部分无效的文档并在没有无效键的情况下输出它。

例如,对于这个脚本:

from cerberus import Validator

schema = {'name': {'type': 'string'},
'user_id': {'type': 'integer'}}
document = {'name': 'john doe', 'user_id': 'fdfdfd'}
v = Validator(schema)
v.validated(document)

这将返回 None 因为验证失败。

有没有办法获取只包含经过验证的字段的文档,如下所示:

{'name': 'john doe'}

最佳答案

这是比@jdoe 更安全的解决方案,因为 Validator.errors 属性的结构不一定与文档的结构相关。但是 document_error_tree 提供了这样的东西。

def remove_invalid_fields(document, errors_tree):
if errors_tree is None:
return document
filtered = {}
for field, value in document.items():
if field in errors_tree.descendants:
continue
if isinstance(value, Mapping):
value = remove_invalid_fields(value, errors_tree[field])
filtered[field] = value
return filtered

schema = {'name': {'type': 'string'},
'user_id': {'type': 'integer'}}
document = {'name': 'john doe', 'user_id': 'fdfdfd'}
validator = Validator(schema)

validator(document)
result = remove_invalid_fields(document, validator.document_error_tree)
assert result == {'name': 'john doe'}

它还会考虑子文档中的错误。

关于python - 如何从未通过 Cerberus 验证的文档中删除字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com