gpt4 book ai didi

python marshmallow force field.int 只接受 int 而不是字符串

转载 作者:行者123 更新时间:2023-11-28 22:18:58 25 4
gpt4 key购买 nike

我有一个棉花糖整数字段,但是当我传递数据时很奇怪因为 {number:"123"} 也可以工作,就好像是一个整数,我会假设内部正在转换为 int,但不希望我想强制用户一直使用 INT 所以有不要混淆哪些数据类型可以接受,是否有方法或参数?

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

谢谢大家的帮助。

最佳答案

查看the code我认为这是不可能的,我对此感到惊讶。我知道您可以设置一个strict 标志,但它只在某些情况下起作用。观察:

from marshmallow import *
from marshmallow.validate import Range

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

在这种情况下有效:

s = MySchema()
s.dumps({'number': "123.1"})
>>> MarshalResult(data='{}', errors={'number': ['Not a valid integer.']})

但在这些情况下不是

s.dumps({'number': 123.1})
>>> MarshalResult(data='{"number": 123}', errors={})

s.dumps({'number': "123"})
>>> MarshalResult(data='{"number": 123}', errors={})

我觉得这不一致。也许你最好的选择是写一个 custom field或在将输入传递给您的模式之前验证输入的不同验证器。

更新:看起来这个问题在最新版本的 Marshmallow 中得到了修复

关于python marshmallow force field.int 只接受 int 而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50142866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com