Gestion des exceptions#

Bloc try/except#

On peut gérer (ou attraper) une exception en utilisant un bloc try/except et le nom d’une classe d’exception :

try:
    a = 1 / 0
except ZeroDivisionError:
    print("Quelqu'un a essayé de diviser par zéro!")

# affiche: Quelqu'un a essayé de diviser par zéro!

À noter : Le bloc dans try s’interrompt dès qu’une exception est levée, et on ne passe dans le bloc except que si une exception est effectivement levée.

x = 14
y = 0
try:
    z = x / y
    print("z vaut", z)
except ZeroDivisionError:
    print("Quelqu'un a essayé de diviser par zéro!")

# affiche: Quelqu'un a essayé de diviser par zéro!

Notez que la ligne print("z vaut", z) n’a pas été exécutée.

Autre exemple :

x = 14
y = 2
try:
    z = x / y
    print("z vaut", z)
except ZeroDivisionError:
    print("Quelqu'un a essayé de diviser par zéro!")

# affiche: 'z vaut 7.0'

Notez que la ligne print("Quelqu'un a essayé de diviser par zéro!") n’a pas été exécutée.

Gestion de plusieurs exceptions#

Le mot après except doit être celui d’une classe, et l’exception n’est gérée que si sa classe est égale ou une fille de celle-ci.

Par exemple, ceci fonctionne car ZeroDivisionError est bien une fille de la classe ArithmeticError :

x = 14
y = 0
try:
    z = x / y
    print("z vaut", z)
except ArithmeticError:
    print("Quelqu'un a essayé une opération impossible")

On peut aussi mettre plusieurs blocs de except :

try:
    tente_un_truc_risqué()
except ZeroDivisionError:
    print("raté : division par zéro!")
except FileNotFoundError:
    print("raté : fichier non trouvé")

Ou gérer des exceptions de classes différentes avec le même bloc :

try:
    tente_un_truc_risqué()
except (ZeroDivisionError, FileNotFoundError)
    print("raté!")

Accéder à la valeur de l’exception#

On peut récupérer l’instance de l’exception levée avec le mot-clé as :

try:
    ouvrir_fichier()
except FileNotFoundError as e:
    print("le fichier: ", e.filename, "n'existe pas")

Ici on utilise l’attribut filename de la classe FileNotFoundError pour afficher un message d’erreur.