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 éxécuté dans tous les cas, qu’une exception ait été levée 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