Les exceptions et leurs gestion

Introduction

Quelles sont les erreurs possibles dans le code suivant ?

nombre = int(input("Entrez un nombre:"))
resultat = 10 / nombre

Si on entre :

  • Une chaine de caractères (autre que des nombres), alors nous aurons l’erreur suivante :

  • Si nous entrons le chiffre 0, alors nous aurons l’erreur suivante :

  • 1 : le chemin (incluant le nom) du fichier dans lequel se trouve l'erreur.

  • 2 : le numéro de la ligne de code où se trouve l'erreur. La cause peut provenir d'une ligne précédente (comme dans l'exemple suivant).

  • 3 : La ligne de code où se trouve l'erreur.

  • 4 : Le type de l'exception et une brève description de l'erreur. Ici, les types d'exceptions dans les deux exemples sont ValueErroret ZeroDivisionError.

Pour éviter ces erreurs d’exécution, nous pouvons, dans certains cas, valider la valeur entrée à l’aide d’un if avant l’instruction dans laquelle il risque d’y avoir une erreur, ou d’utiliser la syntaxe try … except.

Les exceptions

Les erreurs détectées durant l'exécution sont appelées des exceptions. Dans les exemples d'erreurs précédents, les types d'exceptions sont ValueErroret ZeroDivisionError (voir point rouge 4 dans les images précédentes). Autres exemples :

  • TypeError

Signification du message d'erreur : On ne peut pas concaténer une chaîne de caractères (str) et un entier (int).

  • NameError

Signification du message d'erreur : la variable x n'est pas définie.

  • IndexError

Signification du message d'erreur : le numéro de l'indice déborde (l'élément à l'indice 6 n'existe pas dans la liste).

Pour tous les types d'exceptions, voir la documentation officielle de python suivante :

Documentation complète sur les exceptions :

Gestion des exceptions

Syntaxe try/except

  • Dans le bloc « try », on met le code que l’on veut gérer, donc susceptible de lever une exception.

  • Dans le bloc « except », on met le code à exécuter en cas d’exception. Il est possible de gérer plusieurs exceptions pour la(les) même(s) instruction(s).

Exemple :

Gestion des exceptions du code suivant :

  • Gestion de l'exception ZeroDivisionError : Le code suivant permet de détecter et gérer une exception de type ZeroDivisionError dans l’instruction resultat = 10 / nombre.

  • Gestion de l'exception ValueError : Le code suivant permet de détecter et gérer une exception de type ValueError dans l’instruction nombre = int(input("Entrez un nombre:")).

Syntaxe try/except/else/finally

  • Dans le bloc « try », on met le code que l’on veut gérer, donc susceptible de lever une exception.

  • Dans le bloc « except », on met le code à exécuter en cas d’exception. Il est possible de gérer plusieurs exceptions pour la(les) même(s) instruction(s).

  • Dans le bloc « else », on met le code à exécuter lorsqu’aucune exception ne survient.

  • Dans le bloc « finally » est exécuté peu importe ce qui arrive (qu’il y ait une erreur ou non).

Exemple :

Pratiques non conseillées

Last updated