Вы поймали ошибку, залогировали её и хотите пробросить дальше, чтобы пайплайн упал и трейс сохранился. Что нужно сделать внутри except?
AСделать
return None, чтобы функция тихо завершилась без проброса исключения наружуBСделать
pass, чтобы блок выполнился без действий и пайплайн продолжил работу дальшеCСделать
raise Exception('error'), чтобы поднять новое исключение вместо текущегоDСделать
raise без аргументов, чтобы пробросить текущее исключение дальше с tracebackПравильный ответ. Внутри
except команда raise без аргументов перекидывает текущее исключение дальше.Разбор
Если ошибка не является ожидаемой и не должна быть «исправлена» на месте, лучше её не скрывать. raise без аргументов сохраняет оригинальный тип исключения и его трейс, что сильно облегчает отладку. Если вместо этого поднять новое исключение без контекста, можно потерять важные детали о первопричине.
Проверь себя · 1/3разбор после ответа
Вы преобразуете поле из CSV:
price = int(text). Иногда там встречается 'N/A'. Какой вариант обработки лучше всего соответствует цели «ловить только ожидаемую ошибку, а не всё подряд»?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных используется конструкция `try`/`except`/`finally`. Внутри `try` произошла ошибка, она поймана в `except`. Что произойдёт с кодом в блоке `finally`?
- Вы парсите событие в словарь `event`. Что произойдёт при обращении `event['currency']`, если ключа `currency` в словаре нет?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Все вопросы по «Исключения и отладка» →