Гарантируется ли, что для любого возможного блока 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это всегда выполняется, поэтому я бы согласился с этим.