Gestion des exceptions
Intéressons-nous au script suivant :
# script inverse.pychaine = input('Entrer un nombre : ')nombre = float(chaine)inverse = 1.0/nombreprint("L'inverse de", nombre, "est :", inverse)Ce script vous demande de saisir un nombre, puis il calcule et affiche son inverse.
Les exceptions
Quand vous entrez un nombre, tout se déroule normalement :
>>> Entrer un nombre : 10L'inverse de 10.0 est : 0.1>>> Mais que se passe-t-il autrement ?
>>> Entrer un nombre : bonjourTraceback (most recent call last): File "inverse.py", line 3, in <module> nombre = float(chaine)ValueError: could not convert string to float: bonjour>>>
>>> Entrer un nombre : 0Traceback (most recent call last): File "inverse.py", line 4, in <module> inverse = 1.0/nombreZeroDivisionError: float division by zero>>> Python a détecté une erreur : une exception est levée.
Ici nous avons une exception de type ZeroDivisionError (division par 0) et une exception de type ValueError.
Une exception arrête l'exécution normale d'un programme.
Gestion des exceptions
Heureusement, il est possible de gérer les exceptions pour éviter l'arrêt brutal du programme.
Par cela, on utilise conjointement les instructions try et except.
L'instruction else est optionnelle :
try: chaine = input('Entrer un nombre : ') nombre = float(chaine) inverse = 1.0/nombreexcept: #ce bloc est exécuté si une exception est levée dans le bloc try print("Erreur !")else: #on arrive ici si aucune exception n'est levée dans le bloc try print("L'inverse de", nombre, "est :", inverse)
>>> Entrer un nombre : 56L'inverse de 56.0 est : 0.0178571428571>>> Entrer un nombre : 0Erreur !>>> On peut distinguer les différents types d'exceptions :
try: chaine = input('Entrer un nombre : ') nombre = float(chaine) inverse = 1.0/nombreexcept ValueError: #ce bloc est exécuté si une exception de type ValueError est levée dans le bloc try print(chaine, "n'est pas un nombre !")except ZeroDivisionError: #ce bloc est exécuté si une exception de type ZeroDivisionError est levée dans le bloc try print("Division par zéro !")else: #on arrive ici si aucune exception n'est levée dans le bloc try print("L'inverse de", nombre, "est :", inverse)
>>> Entrer un nombre : 0Division par zéro !>>> Entrer un nombre : bonjourbonjour n'est pas un nombre !>>> N'oubliez pas : un programme bien écrit doit gérer proprement les exceptions.