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