Можно ли сделать так, чтобы блок `finally` не выполнился?

При обычном выходе из try — включая return и исключение — finally выполняется. Но при принудительном завершении процесса, например SIGKILL или os._exit(), выполнение finally не гарантируется.

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

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

При обычном выходе из try — включая return и исключение — finally выполняется. Но при принудительном завершении процесса, например SIGKILL или os._exit(), выполнение finally не гарантируется.

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

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

При обычном выходе из try — включая return и исключение — finally выполняется. Но при принудительном завершении процесса, например SIGKILL или os._exit(), выполнение finally не гарантируется.

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

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

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

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

Подробнее