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.
GO TO FULL VERSION