Гарантируется ли, что для любого возможного блока try-finally в Python finally
всегда будет выполняться блок?
Например, скажем, я возвращаюсь, находясь в except
блоке:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
Или, может быть, я повторно подниму Exception
:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
Тестирование показывает, что это finally
действительно выполняется для приведенных выше примеров, но я полагаю, что есть другие сценарии, о которых я не думал.
Существуют ли какие-либо сценарии, при которых finally
блок может не выполняться в Python?
finally
завершите процесс, он не запустится. Или то же самое, если компьютер вылетает раньше: D
finally
не будет работать, если шнур питания оторван от стены.
finally
не выполнить или «нарушить его цель» - это бесконечный циклsys.exit
или принудительное прерывание. В документации указано, чтоfinally
это всегда выполняется, поэтому я бы согласился с этим.