Pour tout bloc try-finally possible en Python, est-il garanti que le finally
bloc sera toujours exécuté?
Par exemple, disons que je reviens dans un except
bloc:
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 finally
cela 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 finally
bloc peut échouer à s'exécuter en Python?
finally
il ne fonctionnera pas. Ou la même chose si l'ordinateur plante avant: D
finally
ne 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.exit
ou une interruption forcée. La documentation indique que celafinally
est toujours exécuté, alors j'irais avec ça.