CodeGym /Cours Java /Python SELF FR /Lancement d’exception

Lancement d’exception

Python SELF FR
Niveau 18 , Leçon 0
Disponible

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é.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION