我有一个 YAML 配置文件,我想使用 Cerberus 对其进行验证。问题是我的 YAML 文件是一种 3 层字典,当我们有超过 2 个嵌套时,验证功能似乎不起作用。例如,当我运行以下代码时:
a_config = {'dict1': {'dict11': {'dict111': 'foo111',
'dict112': 'foo112'},
'dict12': {'dict121': 'foo121',
'dict122': 'foo122'}},
'dict2': 'foo2'}
a_simple_config = {'dict1': {'dict11': 'foo11'}, 'dict2': 'foo2'}
print(type(a_config))
print(type(a_simple_config))
simple_schema = {'dict1': {'type': 'dict', 'schema': {'dict11': {'type': 'string'}}}, 'dict2': {'type': 'string'}}
v_simple = Validator(simple_schema)
schema = {
'dict1': {
'type': 'dict',
'schema': {
'dict11': {
'type': 'dict',
'schema': {
'dict111': {'type': 'string'},
'dict112': {'type': 'string'}
}
}
}
},
'dict2': {'type': 'string'}
}
v = Validator(schema)
print(v.validate(a_config, schema))
print(v.errors)
我明白了:
True
{}
False
{'dict1': [{'dict12': ['unknown field']}]}
我认为不支持验证 3 层文件。所以我唯一的想法是尝试从第 2 层验证它,如果它们都有效,那么就断定我的文件是有效的。我想知道当我有 3 层时我在编写模式时是否犯了一些错误?或者,是否存在验证此类文件的更好主意?
编辑:@flyx 声称问题出在 dict12 的定义中,所以我决定替换它。什么都没有改变。我再次有相同的输出!