Будет напечатано 2. Перед окончательным выходом из try выполняется finally, и его return заменяет ранее подготовленный возврат 1.
Какой вывод будет у функции, использующей try‑finally?
Будет напечатано 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 или исключение продолжает действовать после завершения очистки.