棉花糖序列化 - 一种在每个字段基础上捕获异常的方法?

Marshmallow serialization - a way to catch exceptions on a per field basis?

有没有办法用 marshmallow [1] 在每个字段的基础上捕获异常(在访问 属性 时发生)?

我想使用 marshmallow 序列化 mongo db (mongoengine) 数据库的文档。 对于嵌套架构,引用的对象也会被序列化。

但是,如果引用不存在,mongo引擎会抛出错误。我想在序列化过程中捕获该错误(例如并设置字段为空)

[1] 用于将对象等复杂数据类型与本机 Python 数据类型相互转换的库 https://marshmallow.readthedocs.io/en/3.0/api_reference.html

我最终继承了 Nested 字段并重写了 get_value 方法。

from marshmallow import Schema, fields
from mongoengine.errors import DoesNotExist


class SafeNested(fields.Nested):
    def get_value(self, *args, **kwargs):
        try:
            return super().get_value(*args, **kwargs)
        except DoesNotExist:
            return {}