尝试在cerberus中进行递归模式验证时发生TypeError

时间:2019-01-22 11:41:32

标签: python cerberus

我正在尝试使用cerberus构建一个递归模式,但是似乎缺少它应该如何工作的要点。有人可以帮我吗?

在文档和仓库中的旧问题中,解释了处理递归的方法是使用架构注册表创建自引用架构,否则我们将遇到递归深度限制。

但是,尝试一些非常基本的操作会导致TypeError。

请在文档中获得一个模式递归示例,将是很棒的!一旦了解发生了什么事,我很乐意帮助提交。

cerberus.schema_registry.add(
    'user_schema', 
    {
        'uid': {
            'type': 'integer'
        }, 
        'next': {
            'type': 'list',
            'schema': 'user_schema'
        }
    }
)

schema = {'sender': {'schema': 'user_schema'}}

v = cerberus.Validator(schema=schema)

v.validate({
    'sender': {
        'uid': 1,
        'next': [
            {
                'uid': 1,
            }
        ]
    }
})

运行上述操作会导致以下未处理的异常:

TypeError: argument of type 'NoneType' is not iterable

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

好吧,发布此消息后片刻,我意识到我只是错误地编写了架构。我是一个愚蠢的人。

cerberus.schema_registry.add(
'user_schema', 
{
    'uid': {
        'type': 'integer'
    }, 
    'next': {
        'type': 'list',
        'schema': {
            'type': 'dict',
            'schema': 'user_schema'
        }
    }
}
)

以上工作。 -_-