Чи гарантується будь-який можливий блок спробу в остаточному підсумку в 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завжди виконується, тому я б пішов з цим.