Stack Trace

Python SELF ES
Nivel 17 , Lección 4
Disponible

5.1 Módulo traceback

Stack Trace (traceback) - es información que muestra la secuencia de llamadas de funciones que llevó a la ocurrencia de una excepción. Es una herramienta importante para la depuración, ya que ayuda a los desarrolladores a entender dónde y por qué ocurrió un error.

El análisis del stack trace (traceback) es una parte importante de la depuración de programas, permitiendo a los desarrolladores entender dónde y por qué ocurrió un error. Python proporciona el módulo traceback, que contiene funciones para trabajar con rastreos de pila. Este módulo permite extraer, formatear y mostrar información sobre el stack trace.

Obtención y trabajo con stack trace

Para trabajar con stack trace necesitas importar el módulo traceback, que proporciona funciones para formatear y mostrar información sobre trazas de pila.

Ejemplo de obtención y salida de stack trace:


import traceback

def function_c():
    return 1 / 0  # Esto generará ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        print("Ocurrió una excepción:")
        traceback.print_exc()  # Imprime el stack trace
            
function_a()

Salida:


Ocurrió una excepción:
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

Función traceback.print_exc()

Esta función imprime el stack trace de la excepción actual al flujo estándar de errores.

Ejemplo:


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

Función traceback.format_exc()

Esta función devuelve una cadena con el stack trace formateado de la excepción actual.


try:
    1 / 0
except ZeroDivisionError:
    error_message = traceback.format_exc()
    print("Stack trace obtenido como cadena:")
    print(error_message)    

Función traceback.extract_tb(tb)

Esta función extrae información "cruda" sobre el rastreo de pila desde el objeto de rastreo (traceback object), que se puede obtener a través de sys.exc_info(). Devuelve una lista de marcos de pila.

5.2 Manejo y análisis de stack trace

Función traceback.format_tb(tb)

Esta función devuelve una lista formateada de cadenas que representan el stack trace.


import sys
import traceback

def function_c():
    return 1 / 0  # Esto generará 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("Stack trace formateado:")
        for line in formatted_tb:
            print(line, end="")
            
function_a()

Función traceback.format_exception(exc_type, exc_value, exc_tb)

Esta función devuelve una lista completa y formateada de cadenas que representan la excepción y el stack trace.


import sys
import traceback

def function_c():
    return 1 / 0  # Esto generará 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("Stack trace completamente formateado:")
        for line in full_tb:
            print(line, end="")
            
function_a()

A veces es útil analizar más detalladamente cada marco de pila para obtener información específica sobre el lugar donde ocurrió la excepción y el contexto de ese lugar.


import traceback
import sys

def function_c():
    return 1 / 0  # Esto generará 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"Archivo: {frame.filename}")
            print(f"Línea: {frame.lineno}")
            print(f"Nombre de la función: {frame.name}")
            print(f"Texto: {frame.line}")
            print("-" * 40)
            
function_a()

5.3 Uso de traceback para logging

A veces es importante guardar la información del stack trace en un archivo de log para un análisis posterior. Esto se puede hacer utilizando las funciones del módulo traceback y el módulo estándar logging.

Ejemplo:


import logging
import traceback
import sys

logging.basicConfig(filename='error.log', level=logging.ERROR)
            
def function_c():
    return 1 / 0  # Esto generará 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("Ocurrió una excepción:\n%s", ''.join(full_tb))
            
function_a()

El logging lo veremos un poco más adelante, pero creo que esta información te fue útil.

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