Pour tout bloc try-finally possible en Python, est-il garanti que le finallybloc sera toujours exécuté?
Par exemple, disons que je reviens dans un exceptbloc:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
Ou peut-être que je relance un Exception:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
Les tests montrent que finallycela est exécuté pour les exemples ci-dessus, mais j'imagine qu'il existe d'autres scénarios auxquels je n'ai pas pensé.
Existe-t-il des scénarios dans lesquels un finallybloc peut échouer à s'exécuter en Python?
finallyil ne fonctionnera pas. Ou la même chose si l'ordinateur plante avant: D
finallyne s'exécutera pas si le cordon d'alimentation est arraché du mur.
finallyéchouer à exécuter ou "vaincre son objectif" est pendant une boucle infinie,sys.exitou une interruption forcée. La documentation indique que celafinallyest toujours exécuté, alors j'irais avec ça.