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

如何让Marshmallow的Integer字段仅接受整数而非字符串类型?

解决Marshmallow Integer字段强制要求整数类型输入的问题

你说得没错,Marshmallow的Integer字段默认确实会自动尝试将可转换的字符串(比如"123")转成整数,这是它内置的类型宽容转换机制。要强制用户必须传入整数类型而非字符串格式的数值,有两种常用的实现方式:

1. 使用strict=True参数(推荐)

Marshmallow的Integer字段提供了strict参数,设置为True后,会严格校验输入的类型,只有当输入是int类型时才会通过验证,拒绝任何可转换的字符串或其他类型。

修改后的字段定义如下:

from marshmallow import fields, validate

number = fields.Integer(
    required=True,
    validate=validate.Range(min=1, error="Value must be greater than 0"),
    strict=True
)

这样当传入{"number": "123"}时,会直接抛出类型验证错误,提示输入类型不符合要求。

2. 自定义类型验证器(更灵活的控制)

如果你需要更精细化的类型检查(比如同时排除bool类型,因为bool是int的子类,True会被当作1,可能不符合你的业务需求),可以自定义一个验证器函数:

from marshmallow import fields, validate, ValidationError

def validate_strict_integer(value):
    # 检查是否是纯int类型,排除bool
    if not isinstance(value, int) or isinstance(value, bool):
        raise ValidationError("Value must be an integer type (not string or boolean)")

number = fields.Integer(
    required=True,
    validate=[validate_strict_integer, validate.Range(min=1, error="Value must be greater than 0")]
)

这个验证器会确保输入既不是字符串,也不是布尔值,只有标准的整数类型才能通过。


内容的提问来源于stack exchange,提问作者pelos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:15