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