Ist für jeden möglichen Try-finally-Block in Python garantiert, dass der finally
Block immer ausgeführt wird?
Nehmen wir zum Beispiel an, ich kehre in einem except
Block zurück:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
Oder vielleicht erhebe ich noch einmal Exception
:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
Tests zeigen, dass finally
dies für die obigen Beispiele ausgeführt wird, aber ich stelle mir vor, dass es andere Szenarien gibt, an die ich nicht gedacht habe.
Gibt es Szenarien, in denen ein finally
Block in Python nicht ausgeführt werden kann?
finally
es nicht ausgeführt wird , wenn Sie den Task-Manager öffnen und den Prozess beenden. Oder das gleiche, wenn der Computer vorher abstürzt: D
finally
wird nicht ausgeführt, wenn das Netzkabel von der Wand gerissen wird.
finally
nicht auszuführen oder "seinen Zweck zu vereiteln", ist während einer Endlosschleifesys.exit
oder eines erzwungenen Interrupts. Die Dokumentation besagt, dassfinally
immer ausgeführt wird, also würde ich damit weitermachen.