При обычном выходе из try — включая return и исключение — finally выполняется. Но при принудительном завершении процесса, например SIGKILL или os._exit(), выполнение finally не гарантируется.
Можно ли сделать так, чтобы блок `finally` не выполнился?
При обычном выходе из try — включая return и исключение — finally выполняется. Но при принудительном завершении процесса, например SIGKILL или os._exit(), выполнение finally не гарантируется.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При обычном выходе из try — включая return и исключение — finally выполняется. Но при принудительном завершении процесса, например SIGKILL или os._exit(), выполнение finally не гарантируется.
Он также не начнёт выполняться, пока управление не выйдет из защищённого блока: бесконечный цикл или зависание могут этому помешать. Отключение питания и авария интерпретатора тоже обходят обычную очистку. Поэтому finally подходит для освобождения ресурсов в нормальном процессе, но не заменяет устойчивые транзакции и восстановление после сбоя. return внутри finally, наоборот, выполняется и может скрыть исходный результат или исключение.