Вы пишете функцию для расчёта метрики и понимаете, что без обязательного поля user_id результат будет неверным. Что лучше сделать, чтобы не «тихо» считать мусор и облегчить отладку?
AВернуть 0 и продолжить расчёт, чтобы дашборд не «краснел» и пайплайн дочитал остальные строки
BВернуть
None без объяснений причины, чтобы обработка следующих записей не упала на ошибкеCНапечатать сообщение через
print и продолжить выполнение, посчитав метрику дальше как обычноDПоднять явную ошибку
raise ValueError('user_id is required'), чтобы вызывающий код её увиделПравильный ответ. Если без данных метрика бессмысленна, лучше явно остановиться через
raise, чем скрывать проблему.Разбор
Возврат заглушек вроде 0 или None может незаметно испортить отчёт и сделать проблему трудноуловимой. Если поле обязательно, это нарушение контракта входных данных, и правильнее явно сигнализировать через raise. Так ошибка быстро обнаруживается, а сообщение в трассировке помогает найти источник некорректных данных. Напечатать через print тоже плохо: лог легко потеряется, а функция продолжит считать неверный результат.
Проверь себя · 1/3разбор после ответа
Вы пишете функцию
parse_age(age_text), которая должна принимать только неотрицательный возраст. Как лучше явно сообщить об ошибке входных данных, если пришло -5?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных используется конструкция `try`/`except`/`finally`. Внутри `try` произошла ошибка, она поймана в `except`. Что произойдёт с кодом в блоке `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event['currency']`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →