使用 Cerberus 检测数字字段中的空字符串

Detect empty string in numeric field using Cerberus

我正在使用 python 库 cerberus (http://docs.python-cerberus.org/en/stable/),我想检查 JSON 字段是数字(整数)还是空字符串。

我尝试使用条件:

{"empty": True, "type": "intenger"}

但是当字段为空字符串时,例如:(""),我得到以下错误。

'must be of integer type'

有没有一种方法可以使用基本验证规则,以便它也能检测到数字字段中的空字符串?我知道这可以通过使用扩展验证函数来完成,但我暂时想避免使用该解决方案。

尝试这样的事情:

{"anyof":[
   {"type":"string","allowed":[""]},
   {"anyof_type":["float","integer"]}
]},

我建议不要使模式过于复杂。 1) type 规则可以声明多个类型。 2) empty 规则只适用于相当大的值,所以它会忽略任何给定的整数。因此,这是为您的约束设置的最简单的可能规则:

{'type': ('integer', 'string'),
 'empty': True}

请注意,这不会强制该值是一个空字符串,但允许它是,vulgo:非空字符串也会通过。您可能希望使用带 0max_lengh 规则作为约束。