You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:57:02