IndentationError qui refuse de partir. Ce n'est pas la première fois que je reste plantée devant une ligne rouge dans le terminal sans savoir si c'est grave ou si j'ai juste mal aligné un bloc de code. Une copine m'avait conseillé une extension qui traduirait soi-disant les messages d'erreur en français tout simple ; je l'ai gardée quelques soirs avant de la désinstaller, parce qu'elle rendait l'explication encore plus confuse que l'originale. Du coup j'ai fini par me construire ce tableau, collé juste à côté de mon carnet de notes, pour arrêter de rechercher la même explication chaque fois que le même message revient.
Tableau des messages d'erreur fréquents
Voici les messages que je croise le plus souvent depuis que j'ai commencé, avec ce qu'ils veulent vraiment dire — pas ma version bricolée du soir, mais celle de la documentation officielle de Python, pour être sûre de ne pas raconter n'importe quoi à qui tombera sur cette page après moi.
| Nom de l'erreur | Description technique | Causes fréquentes |
|---|---|---|
| SyntaxError | Levée lorsque l'analyseur syntaxique rencontre une erreur dans la structure du code (Source). | Oubli de deux-points (:) après une instruction if ou def, parenthèses ou guillemets non fermés. |
| IndentationError | Sous-classe de SyntaxError liée à un mauvais alignement des blocs de code (Source). |
Mélange d'espaces et de tabulations, ou absence d'indentation après une instruction de contrôle. |
| NameError | Levée lorsqu'un identifiant (variable ou fonction) local ou global est introuvable (Source). | Utilisation d'une variable avant sa déclaration, ou faute de frappe dans le nom d'une fonction. |
| TypeError | Survient lorsqu'une opération ou une fonction est appliquée à un objet d'un type inapproprié (Source). | Tentative d'additionner une chaîne de caractères (str) et un nombre entier (int). |
| ValueError | Levée quand une fonction reçoit un argument du bon type mais avec une valeur inappropriée (Source). | Passage d'une chaîne non numérique à la fonction int() (ex: int("abc")). |
| IndexError | Levée lorsqu'un indice de séquence (liste, tuple, chaîne) est hors des limites autorisées (Source). | Tentative d'accéder à un indice de liste qui n'existe pas, par exemple en demandant l'élément suivant alors qu'on est déjà arrivé au bout de la liste. |
| KeyError | Survient lors de la recherche d'une clé dans un dictionnaire si celle-ci n'existe pas (Source). | Accès à mon_dict["cle"] alors que "cle" n'a pas été définie dans le dictionnaire. |
| AttributeError | Levée lorsqu'une référence à un attribut ou une méthode échoue pour un objet donné (Source). | Appel de la méthode append() sur une chaîne de caractères au lieu d'une liste. |
| ModuleNotFoundError | Sous-classe de ImportError levée quand un module ne peut pas être localisé (Source). |
Nom de module mal orthographié dans l'instruction import ou module non installé via pip. |
| ZeroDivisionError | Levée lorsque le deuxième argument d'une division ou d'un modulo est zéro (Source). | Calcul arithmétique où le dénominateur — le nombre par lequel on divise — vaut zéro. |
| FileNotFoundError | Levée lorsqu'un fichier ou un répertoire est requis mais n'existe pas (Source). | Chemin d'accès erroné ou fichier supprimé lors de l'utilisation de la fonction open(). |
Structure et hiérarchie des exceptions
Ce qui m'a pris longtemps à comprendre, c'est que ces erreurs ne sont pas toutes des inconnues les unes pour les autres. Un peu comme dans une famille nombreuse où tout le monde finit par descendre d'un même arrière-grand-parent : en Python, toutes les exceptions intégrées descendent d'une base commune, BaseException, et la plupart de celles qu'on croise au quotidien descendent plus précisément de Exception (Source). Concrètement, ça veut dire que si j'écris un jour except ArithmeticError, j'attrape en même temps ZeroDivisionError et son cousin OverflowError — un peu comme intercepter tout le courrier d'une même branche de la famille sans avoir à écrire le nom de chaque cousin un par un. Je ne suis pas sûre d'avoir déjà eu besoin de ça dans mes propres scripts, mais rien que de savoir que cette parenté existe m'a enlevé une couche de mystère.
Quand ce tableau ne suffit pas — genre comprendre pourquoi une erreur remonte d'une fonction à l'autre au lieu de s'arrêter là où elle est apparue — je retourne au tutoriel officiel sur les erreurs et les exceptions (Source). Il sépare d'entrée deux familles de problèmes, les erreurs de syntaxe et les exceptions, et c'est resté l'explication la plus claire que j'aie trouvée sur le sujet — plus claire, honnêtement, que ce qu'un module payant d'une formation en ligne avait réussi à m'expliquer sur le même point.
Est-ce que je finirai un jour par connaître ces messages par cœur, sans avoir besoin de rouvrir cette page ? Aucune idée. Pour l'instant je la garde épinglée dans un onglet.
Dernière vérification : 2026-07-25.
Sources
- Python Docs — Built-in Exceptions, SyntaxError : https://docs.python.org/3/library/exceptions.html#SyntaxError
- Python Docs — Built-in Exceptions, IndentationError : https://docs.python.org/3/library/exceptions.html#IndentationError
- Python Docs — Built-in Exceptions, NameError : https://docs.python.org/3/library/exceptions.html#NameError
- Python Docs — Built-in Exceptions, TypeError : https://docs.python.org/3/library/exceptions.html#TypeError
- Python Docs — Built-in Exceptions, ValueError : https://docs.python.org/3/library/exceptions.html#ValueError
- Python Docs — Built-in Exceptions, IndexError : https://docs.python.org/3/library/exceptions.html#IndexError
- Python Docs — Built-in Exceptions, KeyError : https://docs.python.org/3/library/exceptions.html#KeyError
- Python Docs — Built-in Exceptions, AttributeError : https://docs.python.org/3/library/exceptions.html#AttributeError
- Python Docs — Built-in Exceptions, ModuleNotFoundError : https://docs.python.org/3/library/exceptions.html#ModuleNotFoundError
- Python Docs — Built-in Exceptions, ZeroDivisionError : https://docs.python.org/3/library/exceptions.html#ZeroDivisionError
- Python Docs — Built-in Exceptions, FileNotFoundError : https://docs.python.org/3/library/exceptions.html#FileNotFoundError
- Python Docs — Built-in Exceptions, hiérarchie des exceptions : https://docs.python.org/3/library/exceptions.html#exception-hierarchy
- Python Docs — Tutoriel officiel, Errors and Exceptions : https://docs.python.org/3/tutorial/errors.html