4.1 Gestion de plusieurs exceptions
Python te permet de gérer plusieurs exceptions en utilisant plusieurs blocs except ou un seul bloc except avec un tuple d'exceptions. Voyons ces deux approches.
Plusieurs blocs except
Tu peux utiliser plusieurs blocs except pour gérer différents types d'exceptions de manière différente.
try:
# Code qui peut provoquer une exception
result = int("abc")
except ValueError:
print("Erreur : valeur incorrecte.")
except ZeroDivisionError:
print("Erreur : division par zéro.")
Un seul bloc except avec un tuple d'exceptions
Tu peux gérer plusieurs exceptions dans un seul bloc except en les passant sous forme de tuple.
try:
# Code qui peut provoquer une exception
result = int("abc")
except (ValueError, ZeroDivisionError) as e:
print(f"Une erreur est survenue : {e}")
Utilisation de except NameError as var
Lors de la gestion d'exceptions, tu peux utiliser la syntaxe except <ExceptionType> as <variable> pour obtenir l'objet exceptionnel. Cela te permet d'accéder aux informations sur l'exception, telles que le message d'erreur et d'autres attributs.
try:
# Code qui peut provoquer NameError
print(undeclared_variable)
except NameError as e:
print(f"Une erreur est survenue : {e}")
print(f"Type d'erreur : {type(e)}")
4.2 Portée de la variable d'erreur
La variable dans laquelle l'exception est stockée (e dans l'exemple ci-dessus) est disponible uniquement à l'intérieur de son propre bloc except. En dehors de ce bloc, la variable n'est pas accessible.
try:
# Code qui peut provoquer NameError
print(undeclared_variable)
except NameError as e:
print(f"Une erreur est survenue : {e}")
print(f"Type d'erreur : {type(e)}")
# Ici, e n'est plus accessible, et la ligne suivante provoquera NameError
# print(e) # NameError: name 'e' is not defined
Si tu veux faire quelque chose d'important avec l'exception en dehors de son bloc, il te faut la stocker dans une variable séparée. Exemple :
exception = None
try:
# Code qui peut provoquer une exception
result = int("abc")
except ValueError as e:
exception = e
print("Erreur : valeur incorrecte.")
except ZeroDivisionError as e:
exception = e
print("Erreur : division par zéro.")
print(exception)
Note que la variable exception stocke la dernière exception survenue, ce qui peut être utile pour un traitement ultérieur en dehors du bloc try.
4.3 Ce que contient une erreur d'utile
L'objet d'exception contient des informations sur l'erreur. Selon le type d'exception, l'objet peut contenir différents attributs.
Voici quelques attributs communs disponibles pour la plupart des exceptions :
-
args: Un tuple contenant les arguments passés lors de la création de l'exception. Habituellement, c'est le message d'erreur. -
message: Une chaîne contenant le message d'erreur (dans certaines exceptions). -
__str__: Une méthode qui renvoie la représentation sous forme de chaîne de l'exception. Cette méthode est utilisée pour obtenir la représentation textuelle de l'erreur, qui sera renvoyée lors de l'utilisation de la fonctionprint()sur l'objet d'exception.
Exemple :
try:
# Code qui peut provoquer ValueError
result = int("abc")
except ValueError as e:
print(f"Une erreur est survenue : {e}")
print(f"Arguments de l'erreur : {e.args}")
print(f"Message d'erreur : {str(e)}")
Exemple de gestion de plusieurs exceptions
try:
# Code qui peut provoquer plusieurs types d'exceptions
result = 10 / 0
except (ValueError, ZeroDivisionError) as e:
print(f"Une erreur est survenue : {e}")
print(f"Type d'erreur : {type(e)}")
print(f"Arguments de l'erreur : {e.args}")
Si un ValueError ou un ZeroDivisionError se produit, il sera capturé par le bloc except. Les informations sur l'exception seront disponibles via la variable e. La sortie contiendra le type d'erreur et les arguments passés lors de la création de l'exception.
GO TO FULL VERSION