【发布时间】:2018-02-01 11:52:09
【问题描述】:
我有一个看起来像这样的架构(示例):
Schema({
Any(str, unicode): [{
Required('first_name'): [Any(str, unicode)],
Required('age'): Any('int32', 'double'),
Required('something'): Any(int, long, float, str, unicode)
}]
})
如果我传递一个 int(比如说42)作为键(Any(str, unicode)),我会得到:
<class 'voluptuous.error.Invalid'> : extra keys not allowed @ data[42]. Got ["my_value"]
这并不能很好地代表我的错误,因为它甚至没有告诉我们问题实际上是密钥的类型。值类型的错误是完美的,例如:expected str for dictionary value @ data[0]["my_key"]. Got 42
有没有办法像这样使用voluptuous' Schema 获得更清晰的密钥类型验证消息?
expected str for dictionary key type. Got 42
PS: 还是我的Schema 不正确?我的目标是有一个字典,其中键是字符串或 unicode(这是一个示例),值是具有特定键的字典列表,这些键具有特定的值类型。
更新
我尝试将密钥验证放在另一个 Schema 中,以获得正确的错误消息,如下所示:
KEY_SCHEMA = Schema(Any(str, unicode))
def validate_key(my_key):
KEY_SCHEMA (my_key) # Here the correct error/message is raised
Schema({
validate_key: [{
Required('first_name'): [Any(str, unicode)],
Required('age'): Any('int32', 'double'),
Required('something'): Any(int, long, float, str, unicode)
}]
})
我从KEY_SCHEMA 得到的错误消息是“好的”,我可以做一个try/except raise 来输出一个更好的错误消息,但是它被主要的Schema 捕获并且和以前一样的错误是又回来了。
【问题讨论】:
标签: python validation key schema voluptuous