Traceback

Python SELF FR
Niveau 17 , Leçon 4
Disponible

5.1 Module traceback

Traceback (traceback) — c'est l'info qui montre la séquence d'appels de fonctions ayant conduit à l'exception. C'est un outil important pour le débogage, car il aide les développeurs à comprendre où et pourquoi une erreur s'est produite.

L'analyse de traceback (traceback) — c'est une partie essentielle du débogage des programmes, permettant aux développeurs de comprendre où et pourquoi une erreur s'est produite. Python offre le module traceback, qui contient des fonctions pour travailler avec les tracebacks. Ce module permet d'extraire, de formater et d'afficher les informations sur le traceback.

Obtention et traitement du traceback

Pour travailler avec le traceback, il est nécessaire d'importer le module traceback, qui offre des fonctions pour formater et afficher les informations sur le traceback.

Exemple d'obtention et d'affichage du traceback :


import traceback

def function_c():
    return 1 / 0  # Cela va provoquer ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        print("Une exception est survenue :")
        traceback.print_exc()  # Imprime le traceback
            
function_a()

Sortie :


Une exception est survenue :
Traceback (most recent call last):
    File "example.py", line 12, in function_a
      function_b()
    File "example.py", line 8, in function_b
      function_c()
    File "example.py", line 4, in function_c
      return 1 / 0
ZeroDivisionError: division by zero

Fonction traceback.print_exc()

Cette fonction imprime le traceback de l'exception courante dans le flux d'erreurs standard.

Exemple :


try:
    1 / 0
except ZeroDivisionError:
    traceback.print_exc()

Fonction traceback.format_exc()

Cette fonction renvoie une chaîne contenant le traceback formaté de l'exception courante.


try:
    1 / 0
except ZeroDivisionError:
    error_message = traceback.format_exc()
    print("Traceback reçu sous forme de chaîne :")
    print(error_message)    

Fonction traceback.extract_tb(tb)

Cette fonction extrait les informations "brutes" sur le traceback de l'objet de traceback (traceback object), qui peut être obtenu via sys.exc_info(). Elle renvoie une liste de frames de traceback.

5.2 Traitement et analyse du traceback

Fonction traceback.format_tb(tb)

Cette fonction renvoie une liste formatée de chaînes représentant le traceback.


import sys
import traceback

def function_c():
    return 1 / 0  # Cela va provoquer ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError:
        tb = sys.exc_info()[2]
        formatted_tb = traceback.format_tb(tb)
        print("Traceback formaté :")
        for line in formatted_tb:
            print(line, end="")
            
function_a()

Fonction traceback.format_exception(exc_type, exc_value, exc_tb)

Cette fonction renvoie une liste complète formatée de chaînes représentant l'exception et le traceback.


import sys
import traceback

def function_c():
    return 1 / 0  # Cela va provoquer ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        exc_type, exc_value, exc_tb = sys.exc_info()
        full_tb = traceback.format_exception(exc_type, exc_value, exc_tb)
        print("Traceback complet formaté :")
        for line in full_tb:
            print(line, end="")
            
function_a()

Parfois, il est utile d'examiner en détail chaque frame du traceback pour obtenir des informations spécifiques sur l'endroit où l'exception s'est produite, et sur le contexte de cet endroit.


import traceback
import sys

def function_c():
    return 1 / 0  # Cela va provoquer ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError:
        tb = sys.exc_info()[2]
        for frame in traceback.extract_tb(tb):
            print(f"Fichier : {frame.filename}")
            print(f"Ligne : {frame.lineno}")
            print(f"Nom de la fonction : {frame.name}")
            print(f"Texte : {frame.line}")
            print("-" * 40)
            
function_a()

5.3 Utilisation de traceback pour la journalisation

Parfois, il est important de conserver l'information du traceback dans un fichier journal pour une analyse ultérieure. Cela peut être fait en utilisant les fonctions du module traceback et le module standard logging.

Exemple :


import logging
import traceback
import sys

logging.basicConfig(filename='error.log', level=logging.ERROR)
            
def function_c():
    return 1 / 0  # Cela va provoquer ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        exc_type, exc_value, exc_tb = sys.exc_info()
        full_tb = traceback.format_exception(exc_type, exc_value, exc_tb)
        logging.error("Une exception est survenue :\n%s", ''.join(full_tb))
            
function_a()

Nous examinerons la journalisation un peu plus tard, mais j'espère que cette information vous a été utile.

1
Опрос
Erreurs et exceptions,  17 уровень,  4 лекция
недоступен
Erreurs et exceptions
Erreurs et exceptions
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION