Lire et comprendre un message d'erreur Python (traceback)

NSI Première

Définition

Quand un programme Python plante, il affiche un traceback : le rapport qui dit *quelle* erreur s'est produite et *où*. On le lit en commençant par la dernière ligne (le type d'erreur + le message), puis on remonte la pile d'appels affichée du plus ancien au plus récent (`most recent call last`). Chaque bloc `File "…", line N, in …` indique le fichier, le numéro de ligne et la fonction concernés : c'est la carte au trésor pour retrouver l'instruction fautive.

Exemple corrigé

Énoncé

Voici un programme qui plante :

```python
def moyenne(notes):
return sum(notes) / len(notes)

notes_eleve = []
print(moyenne(notes_eleve))
```

Python affiche :

```
Traceback (most recent call last):
File "bulletin.py", line 5, in <module>
print(moyenne(notes_eleve))
File "bulletin.py", line 2, in moyenne
return sum(notes) / len(notes)
ZeroDivisionError: division by zero
```

Solution

On lit de bas en haut :

1. Dernière ligne d'abord : `ZeroDivisionError: division by zero` → le type d'erreur (division par zéro) et son message. C'est le *quoi*.
2. Le bloc juste au-dessus : `File "bulletin.py", line 2, in moyenne` → l'erreur s'est produite ligne 2, dans la fonction `moyenne`, sur `return sum(notes) / len(notes)`. C'est le *où* réel.
3. Le bloc encore au-dessus : `line 5, in <module>` → c'est la ligne 5 (`print(moyenne(notes_eleve))`) qui a appelé `moyenne`. `<module>` désigne le code principal, hors de toute fonction.

Conclusion : `len(notes)` vaut 0 car `notes_eleve` est vide → division par zéro ligne 2. On corrige en testant la liste vide avant de diviser.

Le bon réflexe : lis toujours la dernière ligne en premier (type + message), puis le dernier bloc `File … line N` pour aller directement à la bonne ligne.

Erreurs classiques

  • Lire le traceback de haut en bas : il faut commencer par la dernière ligne (le type d'erreur), puis remonter.
  • Regarder la première ligne `File … in <module>` au lieu de la dernière : c'est le dernier bloc qui pointe l'instruction réellement fautive.
  • Paniquer devant la longueur du traceback : seules la dernière ligne (le message) et le dernier `File … line N` sont indispensables pour commencer.

Toutes les notions