Traceback

Python SELF PT
Nível 17 , Lição 4
Disponível

5.1 Módulo traceback

Traceback — é a informação que mostra a sequência de chamadas de funções que levaram à ocorrência de uma exceção. É uma ferramenta importante para depuração, pois ajuda os desenvolvedores a entenderem onde e por que ocorreu um erro.

Analisar o traceback é uma parte importante da depuração de programas, permitindo aos desenvolvedores entender onde e por que ocorreu um erro. O Python fornece o módulo traceback, que contém funções para trabalhar com tracebacks. Este módulo permite extrair, formatar e exibir informações sobre o traceback.

Obtendo e trabalhando com traceback

Para trabalhar com traceback, você precisa importar o módulo traceback, que fornece funções para formatar e exibir informações sobre a rastreamento de pilha.

Exemplo de obtenção e saída de traceback:


import traceback

def function_c():
    return 1 / 0  # Isso vai gerar um ZeroDivisionError
            
def function_b():
    function_c()
            
def function_a():
    try:
        function_b()
    except ZeroDivisionError as e:
        print("Aconteceu uma exceção:")
        traceback.print_exc()  # Imprime o traceback
            
function_a()

Saída:


Aconteceu uma exceção:
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

Função traceback.print_exc()

Esta função imprime o traceback da exceção atual no fluxo padrão de erros.

Exemplo:


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

Função traceback.format_exc()

Esta função retorna uma string com o traceback formatado da exceção atual.


try:
    1 / 0
except ZeroDivisionError:
    error_message = traceback.format_exc()
    print("Traceback obtido como string:")
    print(error_message)    

Função traceback.extract_tb(tb)

Esta função extrai informações "cruas" sobre o rastreamento de pilha a partir de um objeto de traceback, que pode ser obtido através de sys.exc_info(). Retorna uma lista de frames de pilha.

5.2 Manipulação e análise de traceback

Função traceback.format_tb(tb)

Esta função retorna uma lista formatada de strings que representam o rastreamento de pilha.


import sys
import traceback

def function_c():
    return 1 / 0  # Isso vai gerar um 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 formatado:")
        for line in formatted_tb:
            print(line, end="")
            
function_a()

Função traceback.format_exception(exc_type, exc_value, exc_tb)

Esta função retorna uma lista completa de strings formatadas que representam a exceção e o rastreamento de pilha.


import sys
import traceback

def function_c():
    return 1 / 0  # Isso vai gerar um 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 completo formatado:")
        for line in full_tb:
            print(line, end="")
            
function_a()

Às vezes, é útil analisar cada frame da pilha em mais detalhes para obter informações específicas sobre o local onde a exceção ocorreu e o contexto desse local.


import traceback
import sys

def function_c():
    return 1 / 0  # Isso vai gerar um 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"Arquivo: {frame.filename}")
            print(f"Linha: {frame.lineno}")
            print(f"Nome da função: {frame.name}")
            print(f"Texto: {frame.line}")
            print("-" * 40)
            
function_a()

5.3 Usando traceback para logging

Às vezes, é importante salvar informações de traceback em um arquivo de log para análise posterior. Isso pode ser feito usando as funções do módulo traceback e o módulo logging padrão.

Exemplo:


import logging
import traceback
import sys

logging.basicConfig(filename='error.log', level=logging.ERROR)
            
def function_c():
    return 1 / 0  # Isso vai gerar um 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("Ocorreu uma exceção:\n%s", ''.join(full_tb))
            
function_a()

Veremos um pouco mais sobre logging mais adiante, mas espero que essa informação tenha sido útil para você.

1
Опрос
Erros e exceções,  17 уровень,  4 лекция
недоступен
Erros e exceções
Erros e exceções
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION