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

try:
    # Instruction(s) contenant potentiellement une exception.
except <Type de l'exception>:
    # Instructions de gestion de l'exception.
  • 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 :

nombre = int(input("Entrez un nombre:"))
resultat = 10 / nombre
  • 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.

nombre = int(input("Entrez un nombre:"))

try:
    resultat = 10 / nombre

except ZeroDivisionError:

    print("La valeur entrée ne doit pas être 0!")
  • 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:")).

try:
    nombre = int(input("Entrez un nombre:"))
    
except ValueError:

    print("La valeur entrée n'est pas un nombre.")

resultat = 10 / nombre

Syntaxe try/except/else/finally

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except ValueError:
    print("La valeur entrée n'est pas un nombre")
except ZeroDivisionError:
    print("La valeur entrée ne doit pas être 0!")
except:
    print("Une erreur est survenue")
else:
    print(resultat)
finally:
    print("Fin!")
  • 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 :

try:
    nombre = int(input("Entrez un nombre:"))
    resultat = 10 / nombre
except ValueError:
    print("La valeur entrée n'est pas un nombre.")
except ZeroDivisionError:
    print("La valeur entrée ne doit pas être 0!")
except:
    print("Une erreur est survenue.")
else:
    print(resultat)
finally:
    print("Fin!")

Pratiques non conseillées

Last updated