Какой вывод будет у функции, использующей try‑finally?

Будет напечатано 2. Перед окончательным выходом из try выполняется finally, и его return заменяет ранее подготовленный возврат 1.

Короткий ответ

Что ответить на собеседовании

Будет напечатано 2. Перед окончательным выходом из try выполняется finally, и его return заменяет ранее подготовленный возврат 1.

Подробный разбор

Ответ с пояснениями

Условие

Определите, что появится в консольном выводе после выполнения следующего кода. В примере функция содержит блок try и блок finally, каждый из которых возвращает значение.


def func():
    try:
        return 1
    finally:
        return 2

print(func())

Ответ

Будет напечатано 2. Перед окончательным выходом из try выполняется finally, и его return заменяет ранее подготовленный возврат 1.

Ход выполнения: try вычисляет значение 1 для возврата, но функция ещё должна выполнить finally. В finally встречается другой return, который определяет окончательный результат.

Такой код нежелателен: return из finally может не только заменить нормальный результат, но и подавить исключение, возникшее в try. Обычно finally используют для очистки ресурсов, не возвращая из него значение. Тогда исходный return или исключение продолжает действовать после завершения очистки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее