我正在从另一个来源接收数据,该来源有时会发送一个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:{'状态':['无效 字符串。']}
但是它们都不适用于两种类型。有没有办法接受两种类型:字符串和整数?
[Marshmallow的fields.Number
(fields.Integer
,fields.Float
和field.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
以处理您的数据。