Módulo 14 - Tratamento básico de erros

Lendo mensagens de erro: a anatomia do traceback

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Reconhecer as partes fixas de um traceback: cabeçalho, localização e veredito.
  • Aplicar a regra de ouro: ler de baixo para cima, tipo e mensagem primeiro.
  • Localizar o arquivo e a linha do problema pelos campos File e line.
  • Traduzir três tracebacks reais para português claro, sem susto.

A anatomia do traceback

Quando uma exceção derruba o programa, o interpretador imprime um relatório chamado traceback. O nome vem de rastrear de volta: ele refaz o caminho que o programa percorreu até o ponto do desastre. Para o iniciante, aquele bloco de texto parece punição; para quem sabe ler, é o Python entregando o culpado com endereço e foto. Veja um traceback real, gerado por um programa de duas linhas que tenta converter texto em número.

Traceback (most recent call last):
  File "conversao.py", line 2, in <module>
    idade = int(texto)
            ^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'vinte'

Um traceback completo. Cinco linhas, quatro informações: o aviso, o endereço, o código e o veredito.

  1. Cabeçalho: Traceback (most recent call last) avisa que o relatório começou e que a chamada mais recente vem por último.
  2. Localização: File "conversao.py", line 2 diz o arquivo e a linha; in <module> indica que o erro está no corpo principal, fora de qualquer função.
  3. A linha do código: o Python copia a linha exata que estourou, para você nem precisar abrir o arquivo.
  4. A seta: os acentos circunflexos (^) sublinham o trecho preciso da linha que causou o problema.
  5. O veredito: a última linha traz o tipo do erro (ValueError) e a mensagem, que aqui até mostra o valor culpado: 'vinte'.

Traduzindo o veredito para português: valor inválido para int() na base 10. Ou seja, a função int() recebeu a palavra vinte e não conseguiu transformá-la em número. Repare que a mensagem entrega até o valor problemático entre aspas. O Python não esconde nada; ele só fala em inglês técnico.

A regra de ouro: de baixo para cima

O instinto de todo mundo é ler o traceback como se lê um texto: de cima para baixo. Resista. A informação mais valiosa mora na última linha, o tipo e a mensagem do erro, e é por ela que a leitura deve começar. Só depois de saber O QUE aconteceu vale a pena subir para descobrir ONDE: o campo line e a linha de código copiada. Em programas grandes, o traceback pode ter dezenas de linhas mostrando função chamando função; a última linha continua sendo o resumo, e a de cima dela, o endereço mais próximo do crime.

  1. Leia a ÚLTIMA linha: qual é o tipo (ValueError? TypeError?) e o que a mensagem diz.
  2. Suba uma linha por vez até achar o primeiro File que aponta para um arquivo SEU.
  3. Anote o número da linha e olhe o trecho de código copiado, com a seta.
  4. Vá até essa linha no seu editor e corrija com a informação do tipo em mãos.

Um detalhe prático que economiza tempo: a mensagem da última linha é a melhor coisa para pesquisar na internet quando você não entender o erro. Copie o tipo e a mensagem, sem os seus nomes de variáveis, e a busca devolve gente que passou pelo mesmo problema. Essa é uma das habilidades mais usadas da profissão, e ninguém conta para o iniciante.

Treino: três tracebacks reais, comentados

Teoria vista, hora do treino. Abaixo estão três tracebacks reais, gerados por programas curtos no Python 3.12. Para cada um, aplique o método: última linha primeiro, depois o endereço. Tente traduzir sozinho antes de ler a legenda.

Traceback (most recent call last):
  File "saudacao.py", line 2, in <module>
    print(nomme)
          ^^^^^
NameError: name 'nomme' is not defined. Did you mean: 'nome'?

Traceback 1. Veredito: NameError, o nome nomme não existe. O programa criou a variável nome e tentou usar nomme, com erro de digitação. O Python 3.12 até sugere a correção: Did you mean: 'nome'?

Traceback (most recent call last):
  File "soma.py", line 1, in <module>
    total = "10" + 5
            ~~~~~^~~
TypeError: can only concatenate str (not "int") to str

Traceback 2. Veredito: TypeError, só dá para concatenar texto com texto. A linha 1 tentou somar o texto "10" com o número 5; os tils e a seta marcam a operação inteira e o operador culpado.

Traceback (most recent call last):
  File "media.py", line 3, in <module>
    media = soma / quantidade
            ~~~~~^~~~~~~~~~~~
ZeroDivisionError: division by zero

Traceback 3. Veredito: ZeroDivisionError, divisão por zero. Na linha 3, a variável quantidade valia 0. O erro real quase nunca está na divisão em si, e sim em quem deixou o zero chegar até ela.

Teste rápido

Apareceu um traceback de 15 linhas na sua tela. Qual é o primeiro passo para entendê-lo?

Perguntas frequentes

Por que o traceback é em inglês? Dá para traduzir?
As mensagens de erro fazem parte do interpretador e são em inglês por padrão, sem opção oficial de tradução. A boa notícia: o vocabulário é pequeno e repetitivo. Com uma dúzia de erros lidos, você reconhece os padrões sem precisar traduzir palavra por palavra.
O que significa in <module> no traceback?
Indica que o erro aconteceu no corpo principal do arquivo, fora de qualquer função. Quando o erro estoura dentro de uma função que você definiu com def, aparece o nome dela no lugar, como in calcular_media. É assim que o traceback mostra o caminho das chamadas.
Por que às vezes o traceback mostra vários blocos de File e line?
Porque o erro aconteceu dentro de uma função que foi chamada por outra, que foi chamada por outra. Cada bloco é uma parada do caminho, da mais antiga (em cima) à mais recente (embaixo). Leia a última linha para o veredito e procure o File mais próximo dela que seja um arquivo seu.
O que são a seta (^) e os tils (~) embaixo da linha de código?
São marcadores de precisão que o Python moderno (3.11 em diante) adiciona: os tils sublinham a expressão envolvida no erro e a seta aponta o operador ou o trecho exato do problema. Em versões antigas esses marcadores não existiam ou eram menos precisos.
Vale a pena copiar a mensagem de erro e pesquisar na internet?
Vale, e é prática profissional comum. Copie o tipo e a mensagem da última linha, retirando as partes específicas suas, como nomes de variáveis e de arquivos. Praticamente todo erro de iniciante já foi perguntado e respondido publicamente em algum fórum.
E quando o traceback aponta uma linha que parece correta?
Acontece, e costuma significar que o problema nasceu antes e só estourou ali. O exemplo clássico é a divisão por zero: a linha da divisão está certa, mas alguém deixou o zero chegar nela. Use a linha apontada como ponto de partida e investigue de onde veio o valor.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.