Устойчивый к ошибкам парсинг и валидация
Python
Senior
Яндекс
Как вы строите слой валидации входных данных (например, JSON из внешнего API) в больших проектах? Почему нельзя просто использовать `dict.get` везде и надеяться на лучшее?
Ответы
Валидация входа
В больших системах важна явная валидация и явные ошибки.
Подходы:
- использовать схемы (`pydantic`, `marshmallow`, `attrs`) с декларативным описанием полей и типов;
- отделить слой валидации (DTO) от доменных моделей;
- валидацию делать на границе модуля/микросервиса.
Простой `dict.get` с дефолтами:
- скрывает ошибки контракта;
- приводит к `None` в местах, где это не ожидается;
- затрудняет отладку и логирование.
Лучше один раз явно упасть с хорошим сообщением, чем тихо продолжить с некорректными данными.