Use tracebacks para localizar erros

Concluído

As exceções em Python são uma característica central da linguagem. Você pode se surpreender ao ler que algo que produz erros é destacado como um recurso. Essa surpresa pode ser porque ferramentas de software robustas não parecem falhar com um traceback (várias linhas de texto que indicam como o erro começou e terminou).

Mas as exceções são úteis porque ajudam na tomada de decisões, produzindo mensagens de erro descritivas. Eles podem ajudá-lo a lidar com problemas esperados e inesperados.

Rastreamentos

Um traceback é o corpo de texto que pode apontar para a origem (e o fim) de um erro não tratado. Compreender os componentes de um traceback tornará você mais eficaz quando estiver corrigindo erros ou depurando um programa que não está funcionando bem.

A primeira vez que você encontrar exceções em Python, você pode ser tentado a evitar o erro suprimindo-o. Quando um programa sofre um erro não tratado, um traceback aparece como a saída. Como você verá neste módulo, os tracebacks são úteis. Há maneiras de lidar corretamente com os erros para que eles não apareçam ou apenas mostrem informações úteis.

Abra uma sessão interativa Python e tente abrir um arquivo inexistente:

open("/path/to/mars.jpg")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/path/to/mars.jpg'

Essa saída tem várias partes fundamentais. Primeiro, o traceback menciona a ordem da saída. Em seguida, informa que o arquivo está stdin (entrada no terminal interativo) na primeira linha da entrada. O erro é FileNotFoundError (o nome da exceção), o que significa que o arquivo não existe ou talvez o diretório para ele não exista.

É muita informação. Pode ser difícil entender por que a linha 1 é significativa ou o que Errno 2 significa.

Abra o diretório desejado no Visual Studio Code e crie um arquivo Python chamado open.py.

Screenshot showing the creation of a new Python file in Visual Studio Code.

Adicione o seguinte conteúdo ao arquivo e salve:

def main():
    open("/path/to/mars.jpg")

if __name__ == '__main__':
    main()

É uma única main() função que abre o arquivo inexistente, assim como antes. No final, esta função usa um auxiliar Python que diz ao intérprete para executar a função main() quando ela é chamada no terminal. Execute o comando em um terminal Bash com Python e verifique a mensagem de erro:

python3 open.py
Traceback (most recent call last):
  File "/tmp/open.py", line 5, in <module>
    main()
  File "/tmp/open.py", line 2, in main
    open("/path/to/mars.jpg")
FileNotFoundError: [Errno 2] No such file or directory: '/path/to/mars.jpg'

A saída de erro faz mais sentido agora. Os caminhos estão apontando para um único arquivo chamado open.py. A saída menciona que o erro começa na linha 5, que inclui a chamada para main(). Em seguida, a saída segue o erro para a linha 2 na chamada de open() função. E, finalmente, FileNotFoundError novamente informa que o arquivo ou o diretório não existe.

Os rastreamentos quase sempre incluem as seguintes informações:

  • Todos os caminhos de arquivo envolvidos, para cada chamada para cada função.
  • Números de linha associados a cada caminho de arquivo.
  • Os nomes das funções, métodos ou classes envolvidos na produção de uma exceção.
  • O nome da exceção que foi levantada.