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