Else et finally#

else#

Si on rajoute un bloc else après le except, le bloc n’est éxécuté que si aucune exception n’a été levée :

try:
    tente_un_truc_risqué()
except (ZeroDivisionError, FileNotFoundError):
    print("raté")
else:
    print("ouf, ça a marché")

finally#

Si on rajoute un bloc finally après le except, le bloc est exécuté dans tous les cas, qu’une exception ait été levé ou non. On s’en sert souvent pour « annuler » du code qui aurait été utilisé dans le bloc try :

personnage = Personnage()
try:
    personnage.entre_en_scène()
    personnage.tente_un_truc_risqué()
except ZeroDivisionError:
    print("raté")
finally:
    personnage.quitte_la_scène()

Si dans le bloc try une exception différente de ZeroDivisionError est levée, on passera quand même dans le bloc finally, puis l’exception sera levée à nouveau.

TODO: exemple plus complet