Try, else, except и finally: подмена возвращаемого значения

Оба вызова напечатают «Финал»: return внутри finally заменяет возврат из try/else или except. Такая конструкция также может скрыть необработанное исключение.

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

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

Оба вызова напечатают «Финал»: return внутри finally заменяет возврат из try/else или except. Такая конструкция также может скрыть необработанное исключение.

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

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

Условие

def test_blocks(a, b): try: result = a / b except ZeroDivisionError: return "Ошибка деления на ноль" else: return f"Результат: {result}" finally: return "Финал"

print(test_blocks(10, 2)) print(test_blocks(10, 0))

Ответ

Оба вызова напечатают «Финал»: return внутри finally заменяет возврат из try/else или except. Такая конструкция также может скрыть необработанное исключение.

Результат:

Финал
Финал

При делении 10 на 2 выполняется else, но перед выходом управление переходит в finally. Его return становится итоговым. При делении на ноль сначала выбирается возврат из except, который затем тоже заменяется. Если нужен диагностический вывод при сохранении результата, в finally можно вызвать print("Финал"), не делая возврат. Обычно этот блок используют для освобождения ресурсов.

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

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

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

Подробнее