Si une erreur survient lors de l’exécution d’un programme en Python, celui-ci peut planter et cessera alors de fonctionner immédiatement. Or certaines erreurs sont prévisibles et peuvent même faire partie du fonctionnement “normal” du programme. C’est notamment le cas s’il y a une forte probabilité qu’une erreur puisse survenir lors d’une étape de l’exécution ou si on souhaite exploiter la survenue d’une erreur comme mécanisme de contrôle.
Voici quelques explications pour pour gérer les erreurs avec try/except
dans vos scripts et programmes en Python.
Cet article n’est pas accompagné d’un script téléchargeable. Les exemples montrés sont issus de la console Python de Pycharm 2023.1 (Community Edition).
Voici un cas simple où les risques de se heurter à une erreur sont assez forts : la lecture d’un fichier. Il suffit par exemple d’une faute de frappe dans le chemin d’accès pour que l’instruction échoue.
Ci-dessous, un extrait de code exécuté dans un environnement où il n’y a pas de fichier correspondant au chemin fichier.txt
:
with open("fichier.txt", "r", encoding="utf-8") as fichier:
print("Lecture du fichier")
Comme prévu, le script plante et affiche une erreur :
L’affichage de l’erreur est certes inesthétique mais demeure assez explicite et compréhensible, alors pourquoi ne pas simplement laisser planter le script et corriger le chemin d’accès ?
- En fonction de l’utilisateur, cette erreur n’est pas forcément si explicite que ça.
- L’extrait présenté ici n’est qu’une instruction isolée, mais il n’est pas toujours simple ni souhaitable de modifier le code source.
- En l’état, le script cesse de s’exécuter dès que l’erreur est levée. Gérer l’erreur va permettre de poursuivre l’exécution du script, que l’erreur survienne ou non.
Comment gérer l’erreur ? Il faut tout d’abord repérer de quel type d’erreur il s’agit. Ici le programme cherche à ouvrir un fichier qui n’existe pas, l’erreur correspondante est FileNotFoundError
(elle apparaît en dernière ligne sur la capture d’écran montrée précédemment).
FileNotFoundError: [Errno 2] No such file or directory: 'fichier.txt'
C’est la suite d’instructions try/except
(documentation) qui va intercepter et gérer l’erreur. Elle fonctionne comme suit :
try:
# bloc d'instructions susceptible de lever une erreur
except Exception: # remplacer Exception par un type d'erreur probable
# bloc d'instructions à exécuter si l'erreur est levée
else: # facultatif
# suite des instructions si l'erreur n'a pas été levée
Dans l’exemple montré ici, la tentative d’ouverture d’un fichier à un chemin d’accès erroné aboutissait à une erreur de type FileNotFound
. Voici comment traiter cette erreur avec try/except
:
try:
with open("fichier.txt", "r", encoding="utf-8") as fichier:
print("Lecture du fichier")
except FileNotFoundError:
print("Le fichier n'existe pas, vérifiez le chemin d'accès")
En exécutant ce script, si le chemin d’accès spécifié correspond bien à un fichier existant la console affichera Lecture du fichier
. Mais si le fichier n’existe pas, le script ne plantera pas et la console affichera le message Le fichier n'existe pas, vérifiez le chemin d'accès
.
Tentative d’ouverture d’un fichier au chemin d’accès fichier.txt
ne correspondant à aucun fichier :
L’erreur a bien été interceptée et la console affiche le message indiquant de vérifier le chemin d’accès.
Pour comparaison, tentative d’ouverture d’un fichier au chemin d’accès input.txt
, qui cette fois mène effectivement à un fichier :
Cet exemple illustre le principe de base de la gestion des erreurs avec Python. En conditions réelles ce mécanisme est bien sûr à utiliser avec des instructions adaptées selon le fonctionnement et les objectifs du programme.
Vous pouvez par exemple vous exercer avec les suggestions d’amélioration du script de l’article consacré à la ligne de commande.
OpenEdition vous propose de citer ce billet de la manière suivante :
Alexander Delaporte (2 mai 2024). Gestion des erreurs avec Try/Except. Tekipaki. Consulté le 10 décembre 2024 à l’adresse https://doi.org/10.58079/10sq2