Pile d'appels ============= Reprenons un exemple de code qui provoque une erreur, par exemple en essayant de diviser par zéro : :: def mauvaise_fonction(): return 1 / 0 def fonction_intermédiaire(): mauvaise_fonction() def fonction_principale(): fonction_intermédiaire() fonction_principale() Si on lance ce code, voilà ce qu'on obtient : :: Traceback (most recent call last): File "mauvaises_maths.py", line 13, in fonction_principale() File "mauvaises_maths.py", line 10, in fonction_principale fonction_intermédiaire() File "mauvaises_maths.py", line 6, in fonction_intermédiaire mauvaise_fonction() File "mauvaises_maths.py", line 2, in mauvaise_fonction return 1 / 0 ZeroDivisionError: division by zero Ceci est une *pile d'appels*. Elle permet de voir exactement par quelles fonctions on est passé et dans quel ordre. Elle se lit de haut en bas : * on a appelé ``fonction_principale()`` ; * cette fonction a à son tour appelé ``fonction_intermédiaire()`` ; * ``fonction_intermédiaire()`` a appelé ``mauvaise_fonction()`` ; * ``mauvaise_fonction()`` a levé une exception. Notez que chaque élément de la pile comprend : * le nom de la fonction ; * le chemin du module la contenant ; * le numéro et la ligne précise du code qui a été appelé . Il est important de bien lire les piles d'appels quand on cherche à comprendre d'où vient une exception. Après la pile d'appels, on a le *nom* de l'exception et sa *description*.