Python Cerberus非空字段强制转int并执行范围校验的实现方法
Cerberus 可空整数字段校验问题解决方案
报错原因
coerce是Cerberus的字段级规则,不允许定义在oneof的子规则中,所以原有写法会触发未知规则的报错。
正确实现方案
我们可以自定义转换函数处理空值场景,配合oneof实现需求:
from cerberus import Validator # 自定义coerce转换函数:空字符串直接返回,非空转int def coerce_age(v): if v == '': return v return int(v) v = Validator() v.schema = { 'name': {'type': 'string', 'minlength': 2}, 'age': { 'coerce': coerce_age, 'oneof': [ {'type': 'string', 'empty': True}, {'type': 'integer', 'min': 5, 'max': 130} ] } }
测试效果
可以用以下用例验证效果:
- 空age的场景:
print(v.validate({'name': 'John', 'age': ''})) # 输出:True,符合预期
- 合法非空age的场景:
print(v.validate({'name': 'John', 'age': '25'})) # 输出:True,转换后age为25,符合区间要求
- 超范围age的场景:
print(v.validate({'name': 'John', 'age': '200'})) # 输出:False,报错提示超出区间
- 非数字age的场景:
print(v.validate({'name': 'John', 'age': 'abc'})) # 输出:False,转换int时报错
内容的提问来源于stack exchange,提问作者K Venner
相关产品推荐
相关产品推荐

