Comment vérifier si une exception a un certain message 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 (lab), vous apprendrez à explorer et accéder aux messages d'exception en Python pour déboguer efficacement et gérer les erreurs. Le laboratoire vous guide dans la création d'un script Python avec une fonction divide qui utilise un bloc try...except pour capturer les exceptions potentielles lors de la division. Vous observerez comment différents types d'exceptions, tels que ZeroDivisionError et TypeError, génèrent des messages d'erreur spécifiques.

Le laboratoire montre ensuite comment accéder à l'objet d'exception et à son type pour obtenir des informations plus détaillées sur l'erreur. En exécutant le script avec différentes entrées, vous verrez comment les messages d'exception fournissent des informations précieuses sur la cause des erreurs, vous permettant d'identifier et de corriger les problèmes dans votre code.


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") subgraph Lab Skills python/catching_exceptions -.-> lab-559608{{"Comment vérifier si une exception a un certain message en Python"}} python/raising_exceptions -.-> lab-559608{{"Comment vérifier si une exception a un certain message en Python"}} end

Explorer les messages d'exception

Dans cette étape, vous apprendrez à explorer les messages d'exception en Python. Les messages d'exception fournissent des informations précieuses sur ce qui a mal fonctionné dans votre code, vous aidant à déboguer et à corriger les erreurs.

Tout d'abord, créons un fichier Python nommé exceptions.py dans votre répertoire ~/project en utilisant l'éditeur VS Code.

## exceptions.py
def divide(x, y):
    try:
        result = x / y
        print("The result is:", result)
    except Exception as e:
        print("An error occurred:", e)

divide(10, 2)
divide(10, 0)
divide("hello", 5)

Dans ce code :

  • Nous définissons une fonction divide(x, y) qui tente de diviser x par y.
  • Nous utilisons un bloc try...except pour capturer toutes les exceptions qui pourraient survenir lors de la division.
  • Si une exception se produit, nous affichons un message d'erreur accompagné de l'objet d'exception e.

Maintenant, exécutons le script exceptions.py en utilisant la commande python :

python exceptions.py

Vous devriez voir la sortie suivante :

The result is: 5.0
An error occurred: division by zero
An error occurred: unsupported operand type(s) for /: 'str' and 'int'

Comme vous pouvez le voir, le premier appel à divide(10, 2) s'exécute avec succès et affiche le résultat. Le deuxième appel, divide(10, 0), lève une exception division by zero, qui est capturée par le bloc except, et le message d'erreur correspondant est affiché. Le troisième appel, divide("hello", 5), lève une TypeError car vous ne pouvez pas diviser une chaîne de caractères par un entier.

Maintenant, modifions le fichier exceptions.py pour afficher le type de l'exception :

## exceptions.py
def divide(x, y):
    try:
        result = x / y
        print("The result is:", result)
    except Exception as e:
        print("An error occurred:", type(e), e)

divide(10, 2)
divide(10, 0)
divide("hello", 5)

Exécutons le script à nouveau :

python exceptions.py

Vous devriez voir la sortie suivante :

The result is: 5.0
An error occurred: <class 'ZeroDivisionError'> division by zero
An error occurred: <class 'TypeError'> unsupported operand type(s) for /: 'str' and 'int'

Cette sortie montre le type de chaque exception qui s'est produite, fournissant encore plus d'informations pour le débogage.

Accéder aux arguments (args) d'une exception

Dans cette étape, vous apprendrez à accéder aux arguments (args) associés à une exception en Python. Les arguments d'une exception peuvent fournir des détails plus spécifiques sur l'erreur qui s'est produite.

Modifions le fichier exceptions.py que vous avez créé à l'étape précédente pour accéder et afficher les arguments de l'exception. Ouvrez exceptions.py dans votre répertoire ~/project en utilisant l'éditeur VS Code.

## exceptions.py
def divide(x, y):
    try:
        result = x / y
        print("The result is:", result)
    except Exception as e:
        print("An error occurred:", type(e), e.args)

divide(10, 2)
divide(10, 0)
divide("hello", 5)

Dans ce code, nous avons modifié le bloc except pour afficher e.args. L'attribut args est un tuple contenant les arguments qui ont été passés au constructeur de l'exception.

Maintenant, exécutons le script exceptions.py :

python exceptions.py

Vous devriez voir la sortie suivante :

The result is: 5.0
An error occurred: <class 'ZeroDivisionError'> ('division by zero',)
An error occurred: <class 'TypeError'> ("unsupported operand type(s) for /: 'str' and 'int'",)

Comme vous pouvez le voir, la sortie inclut maintenant les arguments associés à chaque exception. Pour ZeroDivisionError, l'argument est un tuple contenant la chaîne de caractères 'division by zero'. Pour TypeError, l'argument est un tuple contenant la chaîne de caractères "unsupported operand type(s) for /: 'str' and 'int'".

Modifions à nouveau le fichier exceptions.py pour accéder directement au premier argument :

## exceptions.py
def divide(x, y):
    try:
        result = x / y
        print("The result is:", result)
    except Exception as e:
        print("An error occurred:", type(e), e.args[0])

divide(10, 2)
divide(10, 0)
divide("hello", 5)

Exécutons le script à nouveau :

python exceptions.py

Vous devriez voir la sortie suivante :

The result is: 5.0
An error occurred: <class 'ZeroDivisionError'> division by zero
An error occurred: <class 'TypeError'> unsupported operand type(s) for /: 'str' and 'int'

En accédant à e.args[0], nous pouvons extraire le premier argument de l'exception, qui est souvent la partie la plus descriptive du message d'erreur.

Correspondre à la chaîne de caractères du message

Dans cette étape, vous apprendrez à correspondre à la chaîne de caractères du message d'une exception en Python. Cela est utile lorsque vous souhaitez gérer différemment des types spécifiques d'exceptions en fonction de leur message.

Modifions le fichier exceptions.py sur lequel vous avez travaillé pour capturer spécifiquement l'exception ZeroDivisionError et afficher un message personnalisé. Ouvrez exceptions.py dans votre répertoire ~/project en utilisant l'éditeur VS Code.

## exceptions.py
def divide(x, y):
    try:
        result = x / y
        print("The result is:", result)
    except ZeroDivisionError as e:
        print("Cannot divide by zero!")
    except Exception as e:
        print("An error occurred:", type(e), e.args[0])

divide(10, 2)
divide(10, 0)
divide("hello", 5)

Dans ce code :

  • Nous avons ajouté un bloc except spécifique pour ZeroDivisionError.
  • Si une exception ZeroDivisionError se produit, nous affichons le message "Cannot divide by zero!".
  • Le bloc générique except Exception as e capturera toutes les autres exceptions.

Maintenant, exécutons le script exceptions.py :

python exceptions.py

Vous devriez voir la sortie suivante :

The result is: 5.0
Cannot divide by zero!
An error occurred: <class 'TypeError'> unsupported operand type(s) for /: 'str' and 'int'

Comme vous pouvez le voir, lorsque divide(10, 0) est appelé, l'exception ZeroDivisionError est capturée par le bloc except spécifique, et le message personnalisé "Cannot divide by zero!" est affiché. L'exception TypeError levée par divide("hello", 5) est toujours capturée par le bloc except générique.

Vous pouvez également correspondre directement à la chaîne de caractères du message, bien que cela soit généralement moins recommandé que de capturer des types d'exceptions spécifiques. Voici comment vous pouvez le faire :

## exceptions.py
def divide(x, y):
    try:
        result = x / y
        print("The result is:", result)
    except Exception as e:
        if "division by zero" in str(e):
            print("Cannot divide by zero!")
        else:
            print("An error occurred:", type(e), e.args[0])

divide(10, 2)
divide(10, 0)
divide("hello", 5)

Dans ce code :

  • Nous capturons toutes les exceptions dans le bloc except générique.
  • Nous vérifions si la chaîne de caractères "division by zero" est présente dans la représentation sous forme de chaîne de caractères de l'objet d'exception e.
  • Si c'est le cas, nous affichons "Cannot divide by zero!". Sinon, nous affichons le message d'erreur générique.

Exécutons le script à nouveau :

python exceptions.py

Vous devriez voir la même sortie que précédemment :

The result is: 5.0
Cannot divide by zero!
An error occurred: <class 'TypeError'> unsupported operand type(s) for /: 'str' and 'int'

Bien que correspondre à la chaîne de caractères du message puisse être utile dans certains cas, il est généralement préférable de capturer des types d'exceptions spécifiques car les messages d'exception peuvent changer, rendant votre code moins fiable.

Résumé

Dans ce laboratoire (lab), vous avez exploré les messages d'exception en Python pour comprendre comment déboguer et corriger les erreurs. Vous avez appris à utiliser un bloc try...except pour capturer les exceptions lors d'opérations de division et à afficher l'objet d'exception e pour voir le message d'erreur.

Vous avez également modifié le script pour afficher le type de l'exception, ce qui vous a permis de mieux comprendre la nature des erreurs rencontrées, telles que ZeroDivisionError et TypeError. Cela permet un débogage et une gestion des erreurs plus ciblés.