Gérer les erreurs avec try/except
Introduction
Vous travaillez comme assistant administratif dans une petite entreprise. Votre patron vous demande d'écrire un script Python pour lire automatiquement des fichiers de factures et en extraire le montant total.
Votre défi
Le problème : certains fichiers n'existent pas encore, d'autres contiennent du texte au lieu de nombres. Sans protection, votre script plante immédiatement et arrête tout le processus d'automatisation !
Quand on automatise des tâches (lire des fichiers, demander une saisie utilisateur, faire des calculs...), des erreurs vont forcément arriver un jour. Un fichier renommé, un utilisateur qui tape "dix" au lieu de "10", une connexion internet coupée... Un bon script ne doit pas planter à la première anomalie : il doit anticiper, gérer et continuer.
C'est exactement le rôle du bloc try/except.
Le principe de base
L'idée est simple : on met le code "risqué" dans un bloc try (essayer), et si une erreur survient, Python exécute le bloc except (sinon/attraper) au lieu de crasher.
1try:
2 # Code qui pourrait échouer
3 resultat = 10 / 0
4except ZeroDivisionError:
5 # Code exécuté si l'erreur se produit
6 print("Erreur : division par zéro impossible !")
7
8print("Le programme continue normalement.")Sans try/except, cette division aurait immédiatement arrêté tout le script avec un message d'erreur rouge (une "exception non gérée"). Avec try/except, le programme affiche notre message personnalisé et continue son exécution.
Le déroulement visualisé
💡 À retenir :
try/exceptne supprime pas les erreurs, il permet de les intercepter pour réagir intelligemment (message clair, valeur par défaut, nouvelle tentative...) au lieu de laisser le programme s'arrêter brutalement.
Les erreurs courantes en automatisation
Voici les exceptions que vous rencontrerez le plus souvent quand vous automatisez des tâches (fichiers, saisies, calculs) :
| Type d'erreur | Situation typique | Exemple de code déclencheur |
|---|---|---|
FileNotFoundError | Le fichier demandé n'existe pas | open("facture.txt") |
ValueError | Format de donnée invalide (ex: texte au lieu de nombre) | int("dix") |
ZeroDivisionError | Division par zéro | 10 / 0 |
PermissionError | Pas les droits d'accès à un fichier | open("/system/secret.txt") |
KeyError | Clé absente dans un dictionnaire | donnees["age"] |
IndexError | Index hors limites dans une liste | liste[100] |
Exemple concret : lire un fichier en toute sécurité
1nom_fichier = "facture_client.txt"
2
3try:
4 with open(nom_fichier, "r") as f:
5 contenu = f.read()
6 print("Contenu lu avec succès !")
7except FileNotFoundError:
8 print(f"Erreur : le fichier '{nom_fichier}' n'existe pas.")
9 contenu = ""Exemple concret : convertir une saisie utilisateur
1saisie = input("Entrez votre âge : ")
2
3try:
4 age = int(saisie)
5 print(f"Vous avez {age} ans.")
6except ValueError:
7 print("Erreur : veuillez entrer un nombre valide, pas du texte.")⚠️ Attention : Évitez d'écrire un
except:"muet" (sans préciser le type d'erreur). Cela attrape TOUTES les erreurs, même celles que vous n'aviez pas prévues, et peut cacher de vrais bugs dans votre code. Préférez toujours préciser le type d'exception, commeexcept ValueError:.
Gérer plusieurs types d'erreurs
On peut empiler plusieurs blocs except pour traiter différents cas, et ajouter else (si tout va bien) et finally (toujours exécuté, erreur ou pas).
1try:
2 nombre = int(input("Entrez un diviseur : "))
3 resultat = 100 / nombre
4
5except ValueError:
6 print("Ce n'est pas un nombre valide.")
7
8except ZeroDivisionError:
9 print("Impossible de diviser par zéro.")
10
11else:
12 print(f"Résultat : {resultat}")
13
14finally:
15 print("Fin du traitement, merci d'avoir utilisé le programme.")Testez vous-même
Simulateur de division sécurisée
Entrez un nombre pour diviser 100 et voyez comment try/except réagit selon la valeur saisie.
Le saviez-vous ?
Le saviez-vous ?
Le concept de gestion d'exceptions existe depuis les années 1960 ! Le langage PL/I d'IBM (1964) fut l'un des premiers à introduire un mécanisme similaire à try/except, appelé alors ON-conditions.
— Histoire des langages de programmation, IBM Systems Journal
Points clés à retenir
🎯 En pratique : Utilisez try/except surtout autour des opérations « risquées » : lecture de fichiers, conversions de types, appels réseau, saisies utilisateur. Pas besoin d'en mettre partout dans votre code !
💡 À retenir : Précisez toujours le type d'exception (
except FileNotFoundError:plutôt queexcept:) pour garder le contrôle sur les erreurs que vous gérez réellement.
⚠️ Attention : Un
try/exceptmal utilisé peut masquer de vrais bugs. Ne l'utilisez jamais pour "cacher" une erreur sans comprendre pourquoi elle se produit.
Mini-quiz
Que se passe-t-il si aucune erreur ne survient dans le bloc try ?
En bref
- 1try/except permet d'intercepter les erreurs pour éviter que le script ne s'arrête brutalement
- 2Précisez toujours le type d'exception (FileNotFoundError, ValueError, etc.) plutôt que d'utiliser un except générique
- 3Utilisez else pour le code exécuté sans erreur, et finally pour le code toujours exécuté, erreur ou pas