6.1 Lancer des exceptions intentionnellement
En Python, tu peux lancer des exceptions intentionnellement en utilisant
l'instruction raise
. Cela te permet de signaler une erreur ou
une situation incorrecte dans ton programme. Voyons
les différentes façons d'utiliser l'instruction raise
et
le remballage des exceptions.
Lancer des exceptions standards
La syntaxe générale de cette opération est la suivante :
raise exception
Tu peux lancer des exceptions standards, comme Exception
,
TypeError
et d’autres, en leur passant des messages appropriés.
Exemple : raise Exception
def check_number(value):
if value < 0:
raise Exception("Désolé, pas de nombres en dessous de zéro")
try:
check_number(-5)
except Exception as e:
print(f"Exception capturée : {e}")
Dans cet exemple, si la valeur est inférieure à zéro, une
Exception
est lancée avec le message "Désolé, pas de nombres en dessous de zéro"
.
Exemple : raise TypeError
def check_integer(value):
if not isinstance(value, int):
raise TypeError("Seuls les entiers sont autorisés")
try:
check_integer("string")
except TypeError as e:
print(f"Exception capturée : {e}")
Dans cet exemple, si la valeur n’est pas un entier, un
TypeError
est lancé avec le message "Seuls les entiers sont autorisés"
.
6.2 Remballage d’exception
Parfois, il est nécessaire de capturer une exception et d’en lancer une autre,
fournissant des informations plus spécifiques ou utiles. Cela peut
se faire à l'aide de
l'instruction raise
... from
, qui conserve l'exception d'origine comme cause pour
la nouvelle.
La syntaxe générale de cette opération est la suivante :
raise nouvelle_exception from ancienne_exception
Exemple : Remballage d’exception
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("La variable est vide")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Variable vide détectée") from e
Dans cet exemple, si la valeur de la variable est vide, tout d'abord un
ValueError
est lancé avec le message "La variable est vide"
.
Cette exception est ensuite capturée, et une nouvelle exception
EmptyVariableError
est lancée avec le message "Variable vide détectée"
, tout en transmettant l'exception d'origine à l'aide de
from
.
6.3 Analyse des exceptions remballées
Utiliser l'instruction
raise
... from
permet
de conserver des informations sur la chaîne d'exception, ce qui peut être utile
pour le débogage. Tu peux analyser les exceptions remballées et leurs
causes.
Exemple d’analyse des exceptions remballées :
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("La variable est vide")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Variable vide détectée") from e
Lancer le code ci-dessus produira la sortie suivante :
Traceback (most recent call last):
File "example.py", line 8, in
check_non_empty("")
File "example.py", line 5, in check_non_empty
raise ValueError("La variable est vide")
ValueError: La variable est vide
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "example.py", line 10, in
raise EmptyVariableError("Variable vide détectée") from e
EmptyVariableError: Variable vide détectée
La première erreur (marquée en vert)
est l'erreur d'origine qui s'est produite quelque part dans le code. Parfois, ces erreurs surviennent de temps en temps, et c'est un comportement normal du programme.
La deuxième erreur (marquée en bleu)
est une erreur de plus haut niveau. Ton programme ou framework doit savoir comment la gérer. Mais si tu veux approfondir et comprendre les raisons de l'erreur, la première erreur (verte) est là pour t'aider.
Tout est très bien pensé.
GO TO FULL VERSION