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