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 <module>
      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 s'appelle une *pile d'appels*. Elle permet de voir exactement par quelles fonction on est passé et
dans quel ordre. Elle se lit de haut en bas:

* On appelé `fonction_principale()`
* Cette fonction a à son tour appelé `fonction_intermédiaire()`
* `fonction_intermédiaire()` à 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 contetant
* 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*.

