python棉花糖,取fields.Int()或fields.Str()

问题描述 投票:0回答:1

我正在从另一个来源接收数据,该来源有时会发送一个int,有时还会发送给定变量:location的字符串。例如,他们将以1或2或3为整数,或者他们将发送“建筑物”或“汽车”或“公共汽车”作为示例。

我尝试过

location = fields.Int(allow_string=True, strict=False)

会出现以下错误

marshmallow.exceptions.ValidationError:{'状态':['无效 整数。']}

location = fields.Str(allow_int=True, strict=False)

会出现以下错误

marshmallow.exceptions.ValidationError:{'状态':['无效 字符串。']}

但是它们都不适用于两种类型。有没有办法接受两种类型:字符串和整数?

python string int marshmallow
1个回答
0
投票

[Marshmallowfields.Numberfields.Integerfields.Floatfield.Decimal继承自)将愉快地接受有效的“可广播”字符串。

这意味着您可以选择将整数或字符串毫无问题地传递给它们。但是,如果投射失败,您将面临异常。

class MySchema(Schema):
     foo = fields.Integer()

MySchema.loads({"foo": "123"})
# prints {"foo": 123}

MySchema.loads({"foo": 456})
# prints {"foo": 456}

MySchema.loads({"foo": "bar"})
# marshmallow.exceptions.ValidationError: {'foo': ['Not a valid integer.']}

相反,fields.String将不接受任何整数。

class MySchema(Schema):
     foo = fields.Integer()

MySchema.loads({"foo": "bar"})
# prints {"foo": "bar}

MySchema.loads({"foo": 123})
# marshmallow.exceptions.ValidationError: {'foo': ['Not a valid string.']}

如果输入是整数或包含整数的字符串,则可以使用fields.Integer解析它们。

如果这是随机的,则需要使用@shihe zhang提到的custom fields并自定义_deserialize_serialize以处理您的数据。

© www.soinside.com 2019 - 2024. All rights reserved.