2.4Gestion des erreurs & exceptions
Un programme robuste ne plante pas au premier imprévu (fichier absent, saisie invalide, division par zéro). La gestion des exceptions avec try / except permet d'anticiper les erreurs et d'y réagir proprement, au lieu de laisser le programme s'arrêter brutalement avec une longue trace rouge.
Vous apprenez à capturer des erreurs ciblées, à utiliser finally (toujours exécuté) et à lever vos propres exceptions avec raise. C'est ce qui distingue un script fragile d'une application fiable, prête pour de vrais utilisateurs.
Vocabulaire de la section
- Exception
- Erreur survenant à l'exécution (ZeroDivisionError, ValueError, FileNotFoundError…) qui interrompt le programme si non gérée.
- try / except
- try contient le code risqué ; except attrape l'erreur et exécute un code de secours au lieu de planter.
- finally
- Bloc exécuté DANS TOUS LES CAS (erreur ou non) : idéal pour libérer une ressource (fermer un fichier).
- raise
- Lève volontairement une exception, pour signaler une situation anormale (ex. un âge négatif).
- Traceback
- La trace d'erreur affichée par Python : lue de bas en haut, elle indique le type d'erreur et la ligne fautive.
Quelle est la façon moderne et recommandée de formater du texte ?
En pratique — Fiabiliser un programme avec try/except
- Demandez un nombre à l'utilisateur et convertissez-le : entourez la conversion d'un try/except ValueError pour redemander en cas de saisie non numérique.
- Gérez une division en attrapant ZeroDivisionError avec un message clair au lieu d'un plantage.
- Ouvrez un fichier inexistant dans un try/except FileNotFoundError ; ajoutez un finally qui affiche « opération terminée ».
- Écrivez une fonction qui lève (raise) une ValueError si on lui passe un âge négatif, et testez-la.
Points clés à retenir
- try/except attrape les erreurs au lieu de laisser le programme planter.
- Ciblez le type d'erreur (ValueError, FileNotFoundError…) plutôt qu'un except vide.
- finally s'exécute toujours : parfait pour libérer une ressource.
- raise lève une exception pour signaler une situation anormale.
Questions fréquentes
Faut-il attraper toutes les erreurs avec un except général ?
Non : un « except: » nu masque tout, y compris des bugs que vous devriez voir. Attrapez des exceptions ciblées (except ValueError) pour ne gérer que ce que vous anticipez, et laissez remonter le reste. C'est une règle d'or de la fiabilité.
Quelle différence entre une erreur de syntaxe et une exception ?
Une erreur de syntaxe (SyntaxError) empêche le programme de démarrer : le code est mal écrit. Une exception survient à l'exécution d'un code par ailleurs valide (fichier absent, division par zéro). Seules les exceptions se gèrent avec try/except.