Lecture libre, sans compteChapitre 4 · Aller plus loin dans l'automatisation

Gérer les erreurs avec try/except

Introduction

Mise en situation

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.

python
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/except ne 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'erreurSituation typiqueExemple de code déclencheur
FileNotFoundErrorLe fichier demandé n'existe pasopen("facture.txt")
ValueErrorFormat de donnée invalide (ex: texte au lieu de nombre)int("dix")
ZeroDivisionErrorDivision par zéro10 / 0
PermissionErrorPas les droits d'accès à un fichieropen("/system/secret.txt")
KeyErrorClé absente dans un dictionnairedonnees["age"]
IndexErrorIndex hors limites dans une listeliste[100]

Exemple concret : lire un fichier en toute sécurité

python
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

python
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, comme except 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).

python
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 que except:) pour garder le contrôle sur les erreurs que vous gérez réellement.

⚠️ Attention : Un try/except mal utilisé peut masquer de vrais bugs. Ne l'utilisez jamais pour "cacher" une erreur sans comprendre pourquoi elle se produit.

Mini-quiz

Mini-Quiz
Question 1 / 3

Que se passe-t-il si aucune erreur ne survient dans le bloc try ?

En bref

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