Imprimir Stacktrace no log do Pyhton

Imprimir Stacktrace No Log Do Pyhton



Uma coleção de chamadas de abordagem em um determinado momento é representada em um stacktrace. Quando um programa gera uma exceção, o Python gera um stacktrace, também conhecido como traceback ou backtrace. Há uma variedade de detalhes neste stacktrace que podem ser explorados para localizar o problema. O pacote de registro do Python vem com vários recursos fundamentais e possui vários níveis de registro, incluindo “depuração”, “informações”, “aviso”, “erro” e “crítico”.

Exemplo 1: imprimir Stacktrace em Python utilizando o módulo Traceback

Neste exemplo, usaremos um código simples para demonstrar como implementar o módulo traceback do Python para imprimir o rastreamento de pilha. Este pacote de trackback inclui um recurso muito apreciado para coletar, armazenar e exibir os rastreamentos de pilha de linguagens de computador. Ele duplica fielmente as operações de impressão de rastreamento de pilha de um script. Se você precisar visualizar o rastreamento de pilha, isso é essencial.

Em outras palavras, um rastreamento de pilha exibe cada operação anterior àquela que resultou no problema. A informação mais importante é sempre reportada na última linha de um stack trace, que é quando a falha é identificada. Todas as chamadas de função no erro resultante podem ser usadas para localizar e resolver o problema rapidamente.







Vamos começar implementando o código por meio da importação da biblioteca traceback do Python. Então, na linha seguinte, criamos um array e listamos os elementos com alguns valores. Os valores da lista de matrizes são '7', '8', '9' e '10'. Existem quatro valores na lista de matrizes. Esta lista de array foi salva na variável “A” inicializada anteriormente.



Em seguida, utilizamos o termo “try” e o valor “A=6” na linha seguinte. Utilizamos os blocos try-except em Python para gerenciar as exceções. Essa abordagem é usada para escrever o script que pode gerar um erro no cabeçalho do bloco. As exceções são essencialmente erros, semelhantes aos erros de sintaxe. Durante uma exceção de um programa, o tratamento de exceção é o único ato de responder à exceção. Voltando ao script, usamos “except” na próxima linha.



No bloco exceto, usamos “traceback.print exc()” que é a abreviação de “exceção de impressão”. Usamos a função “print()” dentro da caixa de exceção que é “fim do programa” para que esta declaração seja impressa quando a exceção surgir. Agora, se ocorrer uma exceção na caixa try, o programa move-se imediatamente para os blocos exceto e continua. Se uma exceção não ocorrer, o bloco de exceção será totalmente ignorado. Agora que a exceção aconteceu, podemos ver no código que o valor “6” foi inserido na caixa try, embora não esteja na lista de arrays. Como resultado, o código vai imediatamente para a caixa de exceção e imprime a instrução 'programa termina' na exibição de saída.





As diferentes chamadas de função que compõem o traceback são ordenadas da mais recente para a menos recente, de baixo para cima. Essas operações são todas representadas por instruções de duas linhas. Cada chamada começa com o nome do arquivo, número de sequência e nome do módulo, todos indicando a localização do código. Depois disso, ele exibe a instrução de impressão de exceção “fim do programa”, pois o valor “6” não estava na lista declarada, o que resulta na saída “índice de lista fora do intervalo”.



Exemplo 2: imprimir Stacktrace em Python utilizando o método Logging.Exception()

Neste exemplo, demonstraremos como usar o método “logging.exception()” do Python para gerar um stacktrace. O pacote de registro em Python nos permite registrar os erros, bem como registrar os erros e exceções. Os módulos de registro nos fornecem uma seleção de módulos de registro, incluindo “depuração”, “informações”, “aviso”, “erro” e “crítico”. Estas são essencialmente camadas de módulos de log, para simplificar. Para registrar uma exceção com um erro em Python, use a função “logging.exception()”. Esta função adiciona um relatório com o status ERROR a este registrador. Acredita-se que os parâmetros sejam para depuração. As informações sobre a exceção são anexadas ao relatório de registro. O único local a partir do qual invocar esse procedimento deve ser os manipuladores de exceção.

Agora, vamos ver o código. Primeiro, importamos duas bibliotecas – a primeira é logging e a segunda é traceback. Em seguida, usamos o método “basicConfig” com “logging” e especificamos o nível como “logging.Debug”. O único argumento que o método “getLogger()” aceita é “name”. Assim, nós o usamos quando usamos a função “logging.getlogger”. Se um nome for fornecido, uma referência a uma instância do logger com esse nome será gerada; caso contrário, a raiz é retornada. O mesmo objeto logger é referenciado por muitas operações getLogger() com a mesma identidade.

Em seguida, usamos try e, como sabemos no bloco try, escrevemos o código que pode gerar uma exceção. Neste caso, usamos “minhafunção()”. Se a situação fornecida não corresponder, ocorrerá uma exceção. Em seguida, o código salta imediatamente para o bloco exceto. Neste blog de exceção, usamos o “logging.info”. Dentro dela, escrevemos a mensagem que queremos imprimir que é “exceção ocorreu”. Isso porque se acontecer uma exceção, simplesmente ocorre um erro então ele exibe essa mensagem na tela. Mas se o erro não ocorrer, ele ignora toda a mensagem de exceção.

Também definimos o “exc info=True” com a mensagem. Todo o stacktrace será incluído no registro quando exc info for definido como True, semelhante ao que acontece com “logger.exception()”. A única diferença é que você pode mudar rapidamente o nível de log de erro para outra coisa simplesmente trocando o registrador.

Agora que ocorreu uma exceção no script, a primeira linha de saída é a mensagem “exceção ocorreu” seguida pelo nível de log que foi usado no script, que é “info”. O nome do registrador aparece como a raiz neste caso. Em seguida, a chamada traceback aparece, exibindo os nomes do módulo, linha e arquivo. Finalmente, a mensagem de erro “myfunction” não é definida.

Vamos falar sobre mais alguns códigos que usam logs. O método exception() começa importando a biblioteca para criação de log. A seguir, duas variáveis ​​– “m” e “n” – são inicializadas e recebem os valores de “7” e “0”, respectivamente. O bloco try agora é usado na etapa subsequente. Dentro dele, escrevemos o código que pode causar uma exceção. Primeiro, declaramos a variável “o”. Então, definimos esse “m” dividido por “n”. Isso causa uma exceção porque o denominador é zero e não podemos dividir nenhum número por zero, o que significa que os erros irão surgir. Como resultado, o código pula para o bloco except onde “logging.error” é usado. Erro é o nível de registro. Se ocorrer uma exceção, imprimimos uma mensagem ou declaração que diz 'ocorreu uma exceção' e definimos 'exc info=true'. Se não o definirmos como verdadeiro, ele imprimirá apenas o bloco de exceção e não exibirá as informações de rastreamento.

Como escolhemos o nível “ERROR” em nosso script, ele primeiro exibe a raiz como o nome do registrador, seguido pela mensagem “ocorreu uma exceção”. As informações de rastreamento que incluíam o nome do arquivo, o número da linha e o módulo são exibidas. A próxima linha mostra um aviso de erro, pois o denominador não pode ser zero. E como o denominador é zero nesse código, o erro é chamado de erro divisor de zero.

Conclusão

Neste artigo, analisamos o processo de impressão de um rastreamento de pilha em um log do Python, bem como como usar o módulo traceback para criar um rastreamento de pilha. No primeiro exemplo, a biblioteca traceback foi importada e os métodos try e except foram usados. O código foi escrito na caixa try. Se ocorrer uma exceção, ele salta rapidamente para o bloco de exceção e exibe a instrução de exceção na tela. No segundo exemplo, utilizamos o registro semelhante ao primeiro exemplo. O método exception() usa os níveis de log “info” e “error”. Se ocorrer uma exceção, ele exibirá uma instrução de exceção.