A force d'écrire des lignes de code et de tester vos propres scripts, vous vous êtes rendus compte que, de temps en temps, l'exécution d'un programme générait une erreur. Le plus souvent, elles sont dues au fait que le programme a été mal écrit (erreurs de syntaxe). Mais un programme complètement fonctionnel peut planter aussi à cause d'erreurs commises par l'utilisateur.
Les erreurs qui apparaissent durant l'exécution d'un programme sont appelées exceptions. On peut les gérer avec les instructions try, except, else, finally.
Nous allons traiter ici d'un cas simple, un script qui réalise une division à partir de deux nombres réels (nombres à virgule... ou pas) saisis par l'utilisateur.
Nous avons vu jusque-là que cela se codait ainsi :
# coding: utf-8
print("--- Ce programme réalise la division de a par b ---")
a = input("Saisir le nombre a : ")
a = float(a) # conversion de la saisie en nombre réel
b = input("Saisir le nombre b : ")
b = float(b) # conversion de la saisie en nombre réel
resultat = a / b
print(resultat))
Erreurs possibles de l'utilisateur :
# coding: utf-8
try:
print("--- Ce programme réalise la division de a par b ---")
a = input("Saisir le nombre a : ")
a = float(a)
b = input("Saisir le nombre b : ")
b = float(b)
resultat = a / b
except ValueError as detail:
print("Un des deux nombres que vous avez saisis n'est pas un nombre")
except ZeroDivisionError:
print("Impossible de diviser par zéro")
else:
print(resultat)
finally:
print("Fin du programme")
Comprendre le programme :
En plus de ValueError et ZeroDivisionError vues précédemment, on peut citer aussi :
La liste de toutes les exceptions est visible en cliquant sur ce lien
Lors d'une exception, il est possible d'afficher, en plus de notre message, le détail de l'erreur renvoyée par Python :
# coding: utf-8
try:
print("--- Ce programme réalise la division de a par b ---")
a = input("Saisir le nombre a : ")
a = float(a)
b = input("Saisir le nombre b : ")
b = float(b)
resultat = a / b
except ValueError as detailErreur:
print("Un des deux nombres que vous avez saisis n'est pas un nombre : ", detailErreur)
except ZeroDivisionError as detailErreur:
print("Impossible de diviser par zéro : ", detailErreur)
else:
print(resultat)
finally:
print("Fin du programme")
Nous avons utilisé ici l'exemple d'une division.
La gestion des exceptions avec try, except est fort utile dans la manipulation des fichiers :
# coding: utf-8
try:
fichier = open("fichier_texte.txt","r")
print(fichier.read())
except FileNotFoundError as detailErreur:
print("Erreur d'ouverture de fichier :", detailErreur)
finally:
print("Fin de programme")
A vous de vous exercer !
Il est possible de définir ses propres classes d'exception ou déclencher des exceptions (avec raise).
Se référer à la documentation officielle pour en savoir plus https://docs.python.org/fr/3/tutorial/errors.html