L
a gestion des erreurs fait partie des compétences essentielles en Python, parce qu’un programme sérieux doit savoir réagir quand quelque chose ne se déroule pas comme prévu.
Une saisie utilisateur incorrecte, un fichier manquant, une division impossible ou une donnée mal formée peuvent survenir à tout moment, surtout dans un contexte d’examen ou de projet réel.
Apprendre à encadrer ces situations permet d’écrire un code plus robuste, plus lisible et surtout plus fiable.
Dans cette page, vous allez travailler les mécanismes clés de Python pour traiter les problèmes proprement : organiser un bloc sensible, capturer des exceptions précises, récupérer des informations utiles sur l’erreur, et garantir l’exécution d’actions indispensables comme la fermeture d’un fichier.
L’objectif est de passer d’un script fragile à un programme qui anticipe, explique et continue de fonctionner intelligemment.
La gestion des erreurs fait partie des compétences essentielles en Python, parce qu’un programme sérieux doit savoir réagir quand quelque chose ne se déroule pas comme prévu.
Une saisie utilisateur incorrecte, un fichier manquant, une division impossible ou une donnée mal formée peuvent survenir à tout moment, surtout dans un contexte d’examen ou de projet réel.
Apprendre à encadrer ces situations permet d’écrire un code plus robuste, plus lisible et surtout plus fiable.
Dans cette page, vous allez travailler les mécanismes clés de Python pour traiter les problèmes proprement : organiser un bloc sensible, capturer des exceptions précises, récupérer des informations utiles sur l’erreur, et garantir l’exécution d’actions indispensables comme la fermeture d’un fichier.
L’objectif est de passer d’un script fragile à un programme qui anticipe, explique et continue de fonctionner intelligemment.
QCM
1
Corrigé
Quel mot-clé est utilisé pour entourer un bloc de code susceptible de générer une erreur ?
A. test
B. try
C. attempt
D. check
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Le bloc 'try' permet de tester une portion de code pour détecter d'éventuelles erreurs sans arrêter le programme.
QCM
2
Corrigé
Quel bloc s'exécute uniquement si une erreur survient dans le bloc d'essai ?
A. catch
B. else
C. except
D. error
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
En Python, 'except' intercepte l'exception levée dans le bloc 'try' pour la traiter proprement.
QCM
3
Corrigé
Comment appelle-t-on l'action de signaler une erreur en programmation Python ?
A. Envoyer une alerte
B. Lever une exception
C. Lancer un bug
D. Casser le script
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
On dit que Python 'lève' (raise) une exception lorsqu'une opération rencontre une anomalie.
QCM
4
Corrigé
Quelle exception est levée lors d'une division par zéro ?
A. ZeroDivisionError
B. MathError
C. NullDivisionError
D. InfinityError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
ZeroDivisionError est l'exception spécifique dédiée aux erreurs de division arithmétique par 0.
QCM
5
Corrigé
Quel bloc s'exécute dans tous les cas, qu'il y ait eu une erreur ou non ?
A. always
B. stop
C. finish
D. finally
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
Le bloc 'finally' est utilisé pour le nettoyage (fermeture de fichiers, etc.), quel que soit le résultat.
QCM
6
Corrigé
À quoi sert le bloc 'else' dans une structure try/except ?
A. À définir une alternative en cas d'erreur
B. À s'exécuter seulement si aucune exception n'a été levée
C. À capturer toutes les erreurs restantes
D. À forcer l'arrêt du programme
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Le bloc 'else' intervient uniquement si le code du 'try' s'est déroulé avec succès sans erreur.
QCM
7
Corrigé
Quelle exception est levée si vous tentez de convertir 'Bonjour' en entier (int) ?
A. TypeError
B. ConversionError
C. ValueError
D. StringError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
ValueError survient quand le type est correct mais que la valeur est inappropriée pour l'opération.
QCM
8
Corrigé
Que se passe-t-il si une erreur survient et n'est pas gérée par un 'except' ?
A. Le programme s'arrête brutalement (crash)
B. Python ignore simplement l'erreur
C. Le programme redémarre tout seul
D. L'erreur est stockée dans une variable par défaut
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
Une exception non gérée remonte jusqu'à l'interpréteur et provoque l'arrêt du script.
QCM
9
Corrigé
Comment capturer une exception et stocker son message dans une variable 'e' ?
A. except Exception = e:
B. except Exception as e:
C. except e from Exception:
D. except(Exception, e):
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Le mot-clé 'as' permet d'assigner l'objet exception à une variable pour l'analyser ou l'afficher.
QCM
10
Corrigé
Quelle erreur survient si vous accédez à une variable non définie ?
A. NameError
B. VariableError
C. KeyError
D. UnboundError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
NameError est levée lorsque l'identifiant (le nom de la variable) n'est pas trouvé dans la portée actuelle.
QCM
11
Corrigé
Peut-on utiliser plusieurs blocs 'except' pour un seul 'try' ?
A. Non, un seul par try
B. Oui, pour gérer différents types d'erreurs spécifiquement
C. Seulement si on utilise 'finally'
D. Oui, mais ils doivent avoir le même nom
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Cela permet de donner une réponse adaptée selon que l'erreur soit mathématique, de saisie ou de fichier.
QCM
12
Corrigé
Quelle exception est levée si on cherche une clé absente dans un dictionnaire ?
A. IndexError
B. MissingError
C. KeyError
D. DictionaryError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
KeyError est spécifique aux dictionnaires lorsqu'une clé demandée n'existe pas.
QCM
13
Corrigé
Comment lever manuellement une exception dans son propre code ?
A. throw Exception()
B. error Exception()
C. stop Exception()
D. raise Exception()
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
Le mot-clé 'raise' déclenche volontairement une exception pour signaler un problème logique.
QCM
14
Corrigé
Lequel de ces codes est la syntaxe minimale correcte ?
A. try: ... except: ...
B. try: ...
C. except: ...
D. try: ... else: ...
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
Un bloc 'try' doit obligatoirement être suivi d'au moins un 'except' ou d'un 'finally'.
QCM
15
Corrigé
Quelle erreur survient si on accède à l'indice 10 d'une liste de 3 éléments ?
A. ValueError
B. IndexError
C. ListError
D. RangeError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
IndexError indique qu'on tente d'accéder à une position qui n'existe pas dans la séquence.
QCM
16
Corrigé
Pourquoi est-il déconseillé d'utiliser un 'except' vide (sans nom d'exception) ?
A. C'est plus lent
B. Cela ne fonctionne pas en Python 3
C. Cela peut cacher des erreurs imprévues (comme une faute de frappe)
D. Cela consomme trop de mémoire
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Un 'except' générique capture tout, y compris les erreurs que vous n'aviez pas prévu de gérer.
QCM
17
Corrigé
Quelle exception est levée si vous additionnez un entier et une chaîne (ex: 5 + 'a') ?
A. TypeError
B. MathError
C. ValueError
D. MixError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
TypeError survient quand une opération est appliquée à un objet de type inapproprié.
QCM
18
Corrigé
Dans une structure try/except/finally, quel bloc gère la fermeture d'un fichier ouvert ?
A. try
B. except
C. else
D. finally
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
Le bloc 'finally' garantit que le fichier sera fermé même si le programme a planté.
QCM
19
Corrigé
Quelle erreur survient si on essaie d'ouvrir un fichier qui n'existe pas ?
A. FileNotFoundError
B. FileMissingError
C. IOError
D. KeyError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
FileNotFoundError est l'exception standard levée par la fonction open() si le chemin est invalide.
QCM
20
Corrigé
Comment peut-on gérer plusieurs exceptions dans un seul bloc 'except' ?
A. except ValueError + TypeError:
B. except (ValueError, TypeError):
C. except ValueError | TypeError:
D. except ValueError, TypeError:
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
On peut passer un tuple d'exceptions pour appliquer le même traitement à plusieurs types d'erreurs.
QCM
21
Corrigé
L'instruction 'try: print(10/0) except ZeroDivisionError: pass' va :
A. Afficher une erreur
B. Arrêter le programme
C. Ne rien faire et continuer
D. Afficher 0
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Le mot-clé 'pass' indique à Python de ne rien faire, ignorant ainsi silencieusement l'erreur.
QCM
22
Corrigé
Quelle est l'exception de base de laquelle presque toutes les autres héritent ?
A. BaseError
B. Exception
C. Error
D. Object
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Presque toutes les exceptions intégrées dérivent de la classe 'Exception'.
QCM
23
Corrigé
Que signifie l'exception 'IndentationError' ?
A. Une variable est mal nommée
B. Le code est mal aligné visuellement
C. Une boucle est infinie
D. Un fichier est introuvable
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Il s'agit d'une erreur de syntaxe spécifique au non-respect des espaces/tabulations en Python.
QCM
24
Corrigé
Comment s'appelle l'affichage détaillé de l'erreur dans la console ?
A. Le log
B. Le rapport
C. La trace (Traceback)
D. L'historique
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Le Traceback montre la pile d'appels et la ligne précise où l'erreur a été générée.
QCM
25
Corrigé
Quelle exception survient si une récursion est trop profonde ?
A. OverflowError
B. MemoryError
C. RecursionError
D. LoopError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Python limite le nombre d'appels récursifs pour protéger la mémoire du système.
QCM
26
Corrigé
Quel est le but principal de la gestion des exceptions ?
A. Cacher tous les bugs aux utilisateurs
B. Rendre le programme plus rapide
C. Permettre au programme de continuer malgré des erreurs prévisibles
D. Supprimer le besoin de tester son code
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Cela permet de gérer les entrées invalides ou les problèmes réseaux sans interrompre l'expérience utilisateur.
QCM
27
Corrigé
Quelle exception est levée par la fonction input() si l'utilisateur interrompt le programme (Ctrl+C) ?
A. SystemExit
B. StopIteration
C. KeyboardInterrupt
D. UserInterrupt
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
KeyboardInterrupt permet au programme de réagir proprement à une demande d'arrêt manuel.
QCM
28
Corrigé
Lequel de ces mots-clés n'appartient PAS au système de gestion d'erreurs Python ?
A. finally
B. except
C. else
D. throw
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
En Python on utilise 'raise', alors que 'throw' est utilisé dans d'autres langages comme Java ou C++.
QCM
29
Corrigé
Peut-on mettre un bloc try à l'intérieur d'un autre bloc try ?
A. Oui, ce sont des exceptions imbriquées
B. Non, c'est interdit
C. Seulement si elles gèrent la même erreur
D. Seulement à l'intérieur d'une fonction
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
L'imbrication permet de gérer des erreurs de manière très granulaire selon les étapes du code.
QCM
30
Corrigé
Quelle erreur est levée si vous tentez de modifier un élément d'un tuple ?
A. AttributeError
B. ImmutableError
C. TypeError
D. ValueError
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Le tuple étant immuable, Python lève une TypeError car il ne supporte pas l'assignation d'item.
Mots & Définitions
Consultez les définitions des termes importants.
La gestion des exceptions est un mécanisme qui permet de traiter proprement les erreurs pendant l’exécution d’un programme. Elle évite qu’un problème prévisible provoque l’arrêt brutal du script et permet de contrôler la réaction du code.
Une exception est un événement anormal qui interrompt le déroulement normal d’un programme. En Python, elle est représentée par un objet qui décrit le type d’erreur et, souvent, un message explicatif.
Une erreur d’exécution apparaît pendant que le programme tourne, quand une opération devient impossible ou invalide. Elle se distingue des erreurs de syntaxe, qui empêchent le code de démarrer.
Le bloc try contient le code susceptible de provoquer une erreur. Il sert à « tester » l’exécution d’instructions en sachant qu’un plan de secours existe en cas de problème.
Le bloc except définit quoi faire lorsqu’une exception survient dans le try. Il permet de capturer un type d’erreur précis et de décider d’une action adaptée plutôt que de laisser le programme s’arrêter.
Le bloc finally s’exécute quoi qu’il arrive, qu’une erreur se produise ou non. Il est très utilisé pour libérer des ressources, comme fermer un fichier ou une connexion.
Le bloc else s’exécute uniquement si aucune exception n’a été levée dans le try. Il sert à séparer le code « réussi » du code de gestion d’erreur, pour gagner en clarté.
Lever une exception consiste à signaler volontairement qu’un problème doit être traité comme une erreur. Cela permet d’arrêter un traitement au bon moment et d’informer clairement le reste du programme.
raise permet de déclencher une exception manuellement dans son code. On l’utilise pour refuser une situation invalide, vérifier une condition, ou propager un problème détecté.
Capturer une exception avec « as e » permet de stocker l’objet d’erreur dans une variable. On peut ainsi récupérer son message, son type ou l’afficher pour diagnostiquer plus facilement.
Un except basé sur Exception capture la plupart des erreurs courantes sans viser un type précis. Il est utile en dernier recours, mais il doit rester contrôlé pour éviter de masquer des problèmes importants.
Un except vide attrape presque tout, y compris des erreurs qu’on ne voulait pas ignorer. Il est déconseillé car il peut cacher une faute de frappe, une erreur de logique ou un bug sérieux.
On peut gérer plusieurs types d’exceptions dans un seul except en les regroupant. Cela évite la répétition quand la réaction est la même pour différents cas d’erreurs.
Les exceptions imbriquées correspondent à un try placé à l’intérieur d’un autre try. Cette technique permet de gérer des opérations dépendantes avec des niveaux de sécurité différents.
Les exceptions en Python sont organisées en une hiérarchie, où des erreurs spécifiques héritent d’erreurs plus générales. Comprendre cette structure aide à choisir un type d’exception précis ou un parent commun.
Exception est une classe générale dont héritent la plupart des erreurs que l’on traite en pratique. La cibler permet de capturer un large ensemble de problèmes sans attraper tout ce qui existe.
Le traceback est l’affichage détaillé qui montre où l’erreur s’est produite et la chaîne d’appels qui y a mené. Il sert à remonter à la cause réelle d’un problème et à le corriger.
NameError survient quand on utilise un nom qui n’existe pas dans le contexte, comme une variable non définie. Il signale souvent une faute de frappe ou un oubli de déclaration.
TypeError apparaît quand on réalise une opération avec des types incompatibles, par exemple additionner un nombre et du texte. Il indique que le programme doit convertir ou adapter les données.
ValueError est levée quand une valeur a le bon type, mais un contenu invalide pour l’opération demandée. Un exemple typique est une conversion qui échoue parce que le texte n’est pas un nombre.
ZeroDivisionError se produit lorsqu’on tente de diviser par zéro. Cette situation est mathématiquement impossible et doit être anticipée par un contrôle ou une gestion d’exception.
IndexError survient quand on tente d’accéder à une position inexistante dans une liste ou une séquence. Elle révèle souvent un mauvais calcul d’indice ou une taille de collection plus petite que prévu.
KeyError apparaît lorsqu’on demande une clé absente dans un dictionnaire. Elle rappelle qu’il faut vérifier l’existence de la clé ou utiliser une méthode plus tolérante.
FileNotFoundError se produit quand on essaie d’ouvrir un fichier qui n’existe pas à l’emplacement indiqué. Elle aide à détecter un chemin incorrect, un nom de fichier erroné ou un fichier manquant.
IndentationError signale un problème d’alignement des blocs de code en Python. Comme l’indentation structure le programme, une mauvaise indentation empêche le code d’être interprété correctement.
RecursionError apparaît quand une fonction s’appelle trop profondément, au-delà de la limite autorisée. Elle indique souvent un cas d’arrêt manquant ou une récursion mal maîtrisée.
KeyboardInterrupt est déclenchée quand l’utilisateur interrompt volontairement le programme, souvent via Ctrl+C. C’est une exception utile à gérer pour quitter proprement et sauvegarder l’état si nécessaire.
pass est une instruction qui ne fait rien, mais qui permet de respecter la syntaxe quand un bloc est obligatoire. Elle peut servir temporairement pendant le développement ou pour ignorer un cas précis.
Un crash correspond à l’arrêt du programme causé par une erreur non gérée. Il survient lorsqu’aucun traitement ne capture l’exception et que Python met fin à l’exécution.
Un tuple est une séquence dont les éléments ne peuvent pas être modifiés après création. Toute tentative de modification directe échoue, ce qui en fait une structure fiable pour des données qui doivent rester stables.
À propos de ce QCM
E
n Python, une erreur d’exécution ne signifie pas forcément que tout doit s’arrêter.
La gestion des exceptions sert justement à reprendre le contrôle quand une opération échoue, à condition de prévoir une structure adaptée.
Le principe repose sur un bloc d’essai qui regroupe les instructions “à risque”, puis sur un ou plusieurs blocs de capture qui définissent la réaction selon le type de problème rencontré.
L’intérêt de cibler des exceptions précises est double : vous évitez de masquer des bugs inattendus et vous donnez une réponse cohérente à chaque situation (donnée invalide, type incompatible, accès hors limites, clé absente, etc.).
Le bloc de fin, lui, joue un rôle de sécurité : certaines actions doivent se produire même si tout se passe mal.
C’est typiquement le cas de la libération de ressources, comme fermer un fichier, terminer une connexion ou nettoyer un état temporaire.
Un autre point important est la séparation claire entre ce qui s’exécute quand tout va bien et ce qui s’exécute en cas de problème : cela rend le code plus lisible et plus simple à maintenir.
Vous apprendrez aussi à “lever” une exception volontairement, ce qui est très utile pour valider une condition et refuser une entrée incohérente dès le départ.
Capturer l’erreur dans une variable permet ensuite d’obtenir un message explicatif, voire d’analyser la cause plus rapidement grâce à l’affichage détaillé de la trace.
Enfin, ces notions s’accompagnent de bonnes pratiques concrètes : regrouper plusieurs exceptions quand le traitement est identique, éviter les captures trop larges, et comprendre pourquoi certaines erreurs de structure (comme l’indentation) empêchent même le code de démarrer.
Conclusion
M
aîtriser les exceptions en Python, c’est apprendre à écrire des programmes qui résistent mieux aux imprévus.
Vous saurez reconnaître les erreurs fréquentes, choisir une capture pertinente, récupérer des informations utiles pour comprendre l’origine du problème, et sécuriser les actions indispensables grâce au bloc de fin.
Avec ces réflexes, votre code devient plus clair, plus professionnel et plus facile à déboguer.
En vous entraînant régulièrement, vous gagnerez en confiance : au lieu de subir une erreur, vous saurez l’anticiper, la traiter proprement et poursuivre le traitement de manière contrôlée.