Pourquoi le bloc finally est exécuté avant except en python ?J'ai 13 ans et j'apprends python. j'ai mis une instruction raise sur un except et un print sur finally mais je vois que le finally s'éxecute avant.
25 février 2023
·
1 min. de lecture
Réponse publiée sur Quora
D’abord bravo, une question de ce niveau à 13 ans, ça montre que tu n’es pas un débutant…
il faut distinguer la “levée de l’exception” dans le bloc except et la “reprise de l’exception” dans le code appelant.
Voici un petit exemple :
def test(a):
try:
print("j'essaie de diviser par", a)
x = 1 / a
except ZeroDivisionError:
print("ya un problème...")
raise Exception("division par zéro")
else:
print("pas d'erreur")
finally:
print("fini")
try:
test(0)
except Exception as e:
print(e)
il produit :
j'essaie de diviser par 0
ya un problème...
fini
division par zéro
ou tu vois :
- que le print du except est bien executé avant le finally dans la fonction
- et le print du except du programme principal imprime l’exception du raise
Python a une excellente documentation en français, parfois un peu technique, mais il y a tout là :
https://docs.python.org/fr/3/tut…
il y a un paragraphe qui dit :
- Une exception peut se produire durant l’exécution d’une clause
exceptouelse. Encore une fois, l’exception est reprise après que la clausefinallya été exécutée.
en fait en utilisant raise dans le bloc except , tu produis en réalité une 2eme exception dans le except, et cette exception sera reprise (= traitée dans le code appelant) après le bloc finally.

Auteurs
Dr. Goulu
(il/lui)
Ingénieur à la retraite, toujours curieux et voyageur
EPFL MS Informatique 1988, PhD automatique 1994, eMBA Management of Technology
