Сериализация зефира - способ отловить исключения для каждого поля? - PullRequest
0 голосов
/ 17 декабря 2018

Есть ли способ перехвата исключений (которые возникают при доступе к свойству) для каждого поля с помощью зефира [1]?

Я хочу использовать зефир для сериализации документов базы данных mongo db (mongoengine).В случае вложенных схем ссылочные объекты также сериализуются.

Однако в случае несуществующей ссылки mongoengine выдает ошибку.Я хотел бы отловить эту ошибку в процессе сериализации (например, и установить нулевое поле)

[1] библиотека для преобразования сложных типов данных, таких как объекты, в и из собственных типов данных Python https://marshmallow.readthedocs.io/en/3.0/api_reference.html

1 Ответ

0 голосов
/ 19 декабря 2018

Я закончил подклассом поля 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 {}
...