1

我正在尝试使用 cerberus 构建递归模式,但似乎错过了它应该如何工作的重点。有人可以帮我吗?

在 repo 中的文档和旧问题中,解释了处理递归的方法是使用模式注册表来创建自引用模式,否则我们会达到递归深度限制。

但是,尝试一些非常基本的东西会导致 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

非常感谢您的帮助!

4

1 回答 1

1

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

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

以上工作。-_-

于 2019-01-22T11:45:26.563 回答