Comment vérifier si une exception spécifique a été levée en Python

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à vérifier si une exception spécifique a été levée en Python. Le laboratoire se concentre sur la compréhension des différents types d'exceptions et sur la manière de les gérer efficacement.

Vous explorerez les types d'exceptions courantes tels que TypeError, NameError, IndexError, KeyError, ValueError et FileNotFoundError grâce à des exemples pratiques dans un script Python. Le laboratoire vous guide dans la création d'un fichier exceptions_demo.py et l'ajout de code qui montre comment chaque type d'exception est levé et capturé à l'aide de blocs try...except.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/custom_exceptions("Custom Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-559566{{"Comment vérifier si une exception spécifique a été levée en Python"}} python/raising_exceptions -.-> lab-559566{{"Comment vérifier si une exception spécifique a été levée en Python"}} python/custom_exceptions -.-> lab-559566{{"Comment vérifier si une exception spécifique a été levée en Python"}} end

Apprenez-en sur les types d'exceptions

Dans cette étape, vous allez apprendre à connaître différents types d'exceptions en Python. Les exceptions sont des événements qui interrompent le flux normal d'exécution d'un programme. Comprendre les types d'exceptions est crucial pour gérer efficacement les erreurs.

Python dispose de nombreuses exceptions intégrées, et vous pouvez également en créer vos propres exceptions. Voici quelques types d'exceptions courantes :

  • TypeError : Levée lorsqu'une opération ou une fonction est appliquée à un objet d'un type inapproprié.
  • NameError : Levée lorsqu'un nom n'est pas trouvé dans l'espace de noms local ou global.
  • IndexError : Levée lorsqu'un indice de séquence est en dehors des limites.
  • KeyError : Levée lorsqu'une clé de dictionnaire n'est pas trouvée.
  • ValueError : Levée lorsqu'une opération ou une fonction reçoit un argument du bon type mais d'une valeur inappropriée.
  • FileNotFoundError : Levée lorsqu'un fichier ou un répertoire est demandé mais ne peut être trouvé.

Explorons ces types d'exceptions avec quelques exemples. Nous allons créer un script Python nommé exceptions_demo.py dans le répertoire ~/project en utilisant l'éditeur VS Code.

  1. Ouvrez VS Code.
  2. Créez un nouveau fichier nommé exceptions_demo.py dans le répertoire ~/project.
  3. Ajoutez le code suivant au fichier exceptions_demo.py :
## TypeError
try:
    result = 1 + "a"
except TypeError as e:
    print(f"TypeError: {e}")

## NameError
try:
    print(undefined_variable)
except NameError as e:
    print(f"NameError: {e}")

## IndexError
try:
    my_list = [1, 2, 3]
    print(my_list[5])
except IndexError as e:
    print(f"IndexError: {e}")

## KeyError
try:
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])
except KeyError as e:
    print(f"KeyError: {e}")

## ValueError
try:
    num = int("abc")
except ValueError as e:
    print(f"ValueError: {e}")

## FileNotFoundError
try:
    with open("nonexistent_file.txt", "r") as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"FileNotFoundError: {e}")

Ce script montre comment différents types d'exceptions sont levés et capturés à l'aide de blocs try...except. Chaque bloc try contient du code qui peut lever une exception spécifique. Si l'exception se produit, le bloc except correspondant est exécuté.

Maintenant, exécutons le script :

  1. Ouvrez le terminal dans VS Code.
  2. Accédez au répertoire ~/project :
cd ~/project
  1. Exécutez le script exceptions_demo.py en utilisant la commande python :
python exceptions_demo.py

Vous devriez voir la sortie suivante :

TypeError: unsupported operand type(s) for +: 'int' and 'str'
NameError: name 'undefined_variable' is not defined
IndexError: list index out of range
KeyError: 'c'
ValueError: invalid literal for int() with base 10: 'abc'
FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent_file.txt'

Cette sortie montre que chaque bloc try a levé l'exception attendue, et le bloc except correspondant a capturé et affiché le message d'exception.

Comprendre les différents types d'exceptions et la manière de les gérer est essentiel pour écrire un code Python robuste et fiable. Dans l'étape suivante, vous apprendrez à capturer des exceptions spécifiques et à les gérer de manière appropriée.

Capturer une exception spécifique

Dans l'étape précédente, vous avez appris à connaître différents types d'exceptions en Python. Maintenant, vous allez apprendre à capturer une exception spécifique en utilisant le bloc try...except. Cela vous permet de gérer les différentes erreurs de manière différente, rendant votre code plus robuste.

Lorsque vous capturez des exceptions, il est recommandé d'être aussi spécifique que possible. Cela empêche votre bloc except de capturer accidentellement des exceptions qu'il n'est pas conçu pour gérer, ce qui peut masquer les erreurs et rendre le débogage plus difficile.

Modifions le script exceptions_demo.py pour capturer une exception spécifique, comme ValueError, lors de la conversion d'une chaîne de caractères en entier.

  1. Ouvrez le fichier exceptions_demo.py dans le répertoire ~/project en utilisant VS Code.
  2. Modifiez le script pour capturer uniquement l'exception ValueError lors de la conversion d'une chaîne de caractères en entier :
try:
    num = int("abc")
except ValueError as e:
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

Dans cet exemple, nous capturons spécifiquement l'exception ValueError qui se produit lorsque int("abc") échoue. Si une autre exception se produit dans le bloc try, elle sera capturée par le bloc except Exception as e:. La déclaration print("Continuing execution...") sera toujours exécutée si une exception est capturée, démontrant que le programme continue de s'exécuter après avoir géré l'exception.

Maintenant, exécutons le script :

  1. Ouvrez le terminal dans VS Code.
  2. Accédez au répertoire ~/project :
cd ~/project
  1. Exécutez le script exceptions_demo.py en utilisant la commande python :
python exceptions_demo.py

Vous devriez voir la sortie suivante :

ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...

Cette sortie montre que l'exception ValueError a été capturée et que le programme a continué son exécution.

Maintenant, modifions le script pour lever une autre exception, comme TypeError, et voyons comment elle est gérée :

  1. Ouvrez le fichier exceptions_demo.py dans le répertoire ~/project en utilisant VS Code.
  2. Modifiez le script pour lever une exception TypeError :
try:
    result = 1 + "a"
except ValueError as e:
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

Maintenant, exécutons le script à nouveau :

python exceptions_demo.py

Vous devriez voir la sortie suivante :

Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...

Cette sortie montre que l'exception TypeError a été capturée par le bloc except Exception as e:, car il n'y a pas de bloc except TypeError spécifique.

La capture d'exceptions spécifiques vous permet de gérer les différentes erreurs de manière différente, rendant votre code plus robuste et plus facile à déboguer. Dans l'étape suivante, vous apprendrez à vérifier l'instance d'une exception.

Vérifier l'instance d'une exception

Dans cette étape, vous allez apprendre à vérifier l'instance d'une exception pour obtenir plus d'informations sur l'erreur qui s'est produite. Lorsque vous capturez une exception, vous pouvez accéder à l'objet exception lui-même, qui contient des détails sur l'erreur.

Modifions le script exceptions_demo.py pour afficher le type et les arguments de l'instance d'exception.

  1. Ouvrez le fichier exceptions_demo.py dans le répertoire ~/project en utilisant VS Code.
  2. Modifiez le script pour afficher le type et les arguments de l'exception ValueError :
try:
    num = int("abc")
except ValueError as e:
    print(f"Exception type: {type(e)}")
    print(f"Exception arguments: {e.args}")
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

Dans cet exemple, nous affichons le type de l'objet exception en utilisant type(e) et les arguments de l'exception en utilisant e.args. L'attribut e.args est un tuple contenant les arguments qui ont été passés au constructeur de l'exception.

Maintenant, exécutons le script :

  1. Ouvrez le terminal dans VS Code.
  2. Accédez au répertoire ~/project :
cd ~/project
  1. Exécutez le script exceptions_demo.py en utilisant la commande python :
python exceptions_demo.py

Vous devriez voir la sortie suivante :

Exception type: <class 'ValueError'>
Exception arguments: ("invalid literal for int() with base 10: 'abc'",)
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...

Cette sortie montre le type de l'exception (ValueError) et les arguments passés au constructeur de l'exception (un tuple contenant le message d'erreur).

Vous pouvez utiliser ces informations pour fournir des messages d'erreur plus détaillés ou prendre des actions spécifiques en fonction du type et des arguments de l'exception.

Par exemple, vous pouvez vérifier si les arguments de l'exception contiennent un message d'erreur spécifique :

try:
    num = int("abc")
except ValueError as e:
    if "invalid literal" in e.args[0]:
        print("Invalid input: Please enter a valid number.")
    else:
        print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

Dans cet exemple, nous vérifions si le premier argument de l'exception ValueError contient la chaîne de caractères "invalid literal". Si c'est le cas, nous affichons un message d'erreur plus spécifique.

Vérifier l'instance d'une exception vous permet de gérer les erreurs de manière plus intelligente et de fournir des messages d'erreur plus informatifs à l'utilisateur.

Résumé

Dans ce laboratoire (lab), la première étape consiste à comprendre les différents types d'exceptions en Python, ce qui est essentiel pour une gestion efficace des erreurs. Le laboratoire présente les exceptions intégrées courantes telles que TypeError, NameError, IndexError, KeyError, ValueError et FileNotFoundError.

Le laboratoire fournit ensuite des exemples pratiques de la façon dont ces exceptions sont levées et capturées à l'aide de blocs try...except. Un script Python nommé exceptions_demo.py est créé pour démontrer chaque type d'exception, montrant comment anticiper et gérer les erreurs potentielles qui pourraient perturber le flux normal d'exécution d'un programme.