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