Imprimer la trace de la pile en Python

Muhammad Waiz Khan 30 janvier 2023
  1. Imprimer la trace de la pile en Python à l’aide du module traceback
  2. Imprimer la trace de la pile en Python à l’aide de la méthode logging.exception()
Imprimer la trace de la pile en Python

Dans ce tutoriel, nous examinerons différentes méthodes pour imprimer la trace de la pile sans arrêter l’exécution du programme en Python.

Une trace de pile contient une liste d’appels de méthode actifs à un moment précis. Nous pouvons imprimer la trace de la pile en Python en utilisant les méthodes suivantes.

Imprimer la trace de la pile en Python à l’aide du module traceback

Le module traceback fournit les fonctionnalités pour extraire, formater et imprimer des traces de pile en Python. La méthode traceback.format_exc() renvoie une chaîne qui contient les informations sur les entrées de trace d’exception et de pile de l’objet traceback.

Nous pouvons utiliser la méthode format_exc() pour imprimer la trace de la pile avec les instructions try et except. L’exemple de code ci-dessous montre comment imprimer la trace de la pile à l’aide de la méthode traceback.format_exc() en Python.

import traceback
import sys

try:
    myfunction()
except Exception:
    print(traceback.format_exc())

Production :

Traceback (most recent call last):
  File "C:\Test\test.py", line 5, in <module>
    myfunction()
NameError: name 'myfunction' is not defined

Au lieu d’utiliser la fonction print(), nous pouvons également utiliser la méthode logger.debug() pour enregistrer la sortie, car la journalisation peut faciliter le débogage. Nous pouvons enregistrer la trace de la pile en Python en utilisant la méthode logger.debug() dans la méthode suivante.

import logging
import traceback

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

try:
    myfunction()
except Exception:
    logger.debug(traceback.format_exc())

Production :

DEBUG:__main__:Traceback (most recent call last):
  File "C:\Test\test.py", line 8, in <module>
    myfunction()
NameError: name 'myfunction' is not defined

Imprimer la trace de la pile en Python à l’aide de la méthode logging.exception()

On peut aussi utiliser la méthode logging.exception() du module logging pour récupérer la trace de la pile en Python. La méthode logging.exception() enregistre le message contenant les informations sur l’exception. Nous pouvons l’utiliser pour imprimer la trace de la pile en Python de la manière suivante.

import logging
import traceback

logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

try:
    myfunction()
except Exception:
    logging.info("General exception noted.", exc_info=True)

Production :

INFO:root:General exception noted.
Traceback (most recent call last):
  File "C:\Test\test.py", line 8, in <module>
    myfunction()
NameError: name 'myfunction' is not defined