如何解决在python棉花糖中序列化映射数组的行为而不必单独迭代和捕获ValidationErrors
是否可以将字典列表反序列化为给定的架构?在文档中,您可以在模式对象中传递many
参数:
from marshmallow import Schema,fields
class UserSchema(Schema):
name = fields.Str()
email = fields.Email()
created_at = fields.DateTime()
user1 = dict(name="Mick",email="mick@stones.com")
user2 = dict(name="Keith",email="keith@stones.com")
users = [user1,user2]
result = UserSchema().load(users,many=True)
print(result)
# [{'name': u'Mick',# 'email': u'mick@stones.com',# 'created_at': '2014-08-17T14:58:57.600623+00:00'}
# {'name': u'Keith',# 'email': u'keith@stones.com',# 'created_at': '2014-08-17T14:58:57.600623+00:00'}]
当单个对象对该架构无效时,它将停止整个过程,并且不会将任何数据保存到指定的变量中,而不得不借助for循环并尝试捕获异常,如下所示:>
from marshmallow import Schema,fields,ValidationError
class UserSchema(Schema):
name = fields.Str(required=True)
email = fields.Email()
created_at = fields.DateTime()
user1 = dict(name=None,user2]
result = []
errors = []
for user in users:
try:
result.append(UserSchema().load(user))
except ValidationError as error:
errors.append(dict(data=error.data,messages=error.messages))
print(result)
print(errors)
# [{'email': 'keith@stones.com','name': 'Keith'}]
# [{'data': {'name': None,'email': 'mick@stones.com'},'messages': {'name': ['Field may not be null.']}}]
所以我的问题是:有没有办法不必诉诸这种策略?类似于以下格式:
result,errors: UserSchema().load(users,many=True)
我尝试了上述方法,目前会引发错误(因为您无法将一个值分解为两个值)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。