Czy dla każdego możliwego bloku try-Final w Pythonie jest zagwarantowane, że finally
blok będzie zawsze wykonywany?
Na przykład, powiedzmy, że wracam będąc w except
bloku:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
A może przebijam ponownie Exception
:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
Testy pokazują, że finally
tak się dzieje w powyższych przykładach, ale wyobrażam sobie, że istnieją inne scenariusze, o których nie pomyślałem.
Czy istnieją scenariusze, w których finally
blok może nie zostać wykonany w Pythonie?
finally
nie zadziała. Albo tak samo, jeśli komputer się wcześniej zawiesił: D
finally
nie zadziała, jeśli przewód zasilający zostanie wyrwany ze ściany.
finally
niepowodzenie w wykonaniu lub „pokonaniu jego celu”, to nieskończona pętlasys.exit
lub wymuszone przerwanie. W dokumentacji stwierdza, żefinally
zawsze jest tak wykonana, że pójdę z tym.