3.2. La gestion des exceptions¶
Lorsque nous savons qu’une partie du code est susceptible de déclencher des exceptions, il est possible de la placer dans un bloc d’instructions try
, qui doit impérativement être suivit d’un bloc d’instructions except
.
L’interprète essaie alors d’exécuter le code contenu dans le bloc try
et, si une exception est rencontrée, l’exécution est interrompue et reprend au début du bloc except
sans pour autant mettre fin au programme.
while True:
try:
n = float(input("Veuillez entrer un nombre : "))
print(f"L'inverse du nombre est : {1/n}")
except:
print("Un erreur est survenue")
Veuillez entrer un nombre : 1
L'inverse du nombre est : 1.0
Veuillez entrer un nombre : un
Un erreur est survenue
Veuillez entrer un nombre : 0
Un erreur est survenue
...
Nous pouvons utiliser plusieurs blocs except
afin de filtrer les exceptions.
Dans ce cas, il faut indiquer la classe des erreurs (qui sont bien entendu des objets) à traiter pour chaque block except
, sauf pour le dernier qui se charge de toutes les exceptions non filtrées.
while True:
try:
n = float(input("Veuillez entrer un nombre : "))
print(f"L'inverse du nombre est : {1/n}")
except ValueError:
print("Un erreur de type ValueError est survenue")
except ZeroDivisionError:
print("Un erreur de type ZeroDivisionError est survenue")
except:
print("Une autre erreur est survenue")
Veuillez entrer un nombre : 1
L'inverse du nombre est : 1.0
Veuillez entrer un nombre : 0
Un erreur de type ZeroDivisionError est survenue
Veuillez entrer un nombre : un
Un erreur de type ValueError est survenue
...
Il est possible de mémoriser l’objet représentant l’erreur en utilisant le mot réservé as
après l’instruction except
Cela permet d’y accéder par la suite, par exemple pour obtenir plus d’informations sur ses propriétés ou sa cause.
Lorsque l’on souhaite utiliser un bloc except
pour traiter plusieurs sortes d’erreurs, on peut indiquer que l’exception est de type Exception
dont héritent toutes les classes d’exceptions.
Grâce à la fonction type()
, on peut ensuite obtenir la classe précise de l’exception.
while True:
try:
n = float(input("Veuillez entrer un nombre : "))
print(f"L'inverse du nombre est: {1/n}")
except Exception as e:
print(f"Un erreur de type {type(e)} est survenue"))
Veuillez entrer un nombre : 1
L'inverse du nombre est : 1.0
Veuillez entrer un nombre : 0
Un erreur de type <class 'ZeroDivisionError'> est survenue
Veuillez entrer un nombre : un
Un erreur de type <class 'ValueError'> est survenue
...