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.