Entenda o problema
O que é Como ler um erro sem entrar em pânico
Mensagem de erro não é castigo: é a única parte do computador que está tentando te ajudar. Ela quase sempre diz o tipo do problema, a linha e o valor que causou tudo.
Cheque seu entendimento
Em um stack trace, qual linha costuma interessar mais?
Construa o modelo mental
Como pensar antes de fazer
Leia de baixo para cima. A última linha traz o tipo do erro (por exemplo TypeError, NameError, NullPointerException) e a mensagem. As linhas acima são o 'stack trace': o caminho que o programa percorreu até quebrar. A linha do SEU arquivo é a que interessa.
Não decore a forma. Tente explicar com suas palavras qual problema “Como ler um erro sem entrar em pânico” resolve.
Veja funcionando
Exemplo completo, do início ao resultado
Erros de sintaxe acontecem antes de rodar (falta um parêntese, dois pontos, chave). Erros de execução acontecem no meio da corrida (dividir por zero, acessar índice inexistente). Erros de lógica não geram mensagem nenhuma — o programa roda e devolve a resposta errada; esses só aparecem com testes.
numeros = [1, 2, 3]
try:
print(numeros[5])
except IndexError as e:
print("Deu erro:", e) # list index out of range
# Erro de lógica: nenhuma mensagem, resultado errado
media = sum(numeros) / 2 # deveria ser len(numeros)
print(media)Leitura linha por linha
numeros = [1, 2, 3]Cria ou atualiza um valor que será usado pelo restante do exemplo.
try:Contribui para a transformação principal mostrada neste exemplo.
print(numeros[5])Produz ou devolve o resultado que permite conferir a execução.
except IndexError as e:Contribui para a transformação principal mostrada neste exemplo.
print("Deu erro:", e) # list index out of rangeProduz ou devolve o resultado que permite conferir a execução.
# Erro de lógica: nenhuma mensagem, resultado erradoComentário de orientação: documenta a intenção sem executar uma ação.
media = sum(numeros) / 2 # deveria ser len(numeros)Cria ou atualiza um valor que será usado pelo restante do exemplo.
print(media)Produz ou devolve o resultado que permite conferir a execução.
O primeiro erro grita. O segundo fica quieto e entrega 3.0 em vez de 2.0 — por isso testar valores conhecidos é obrigatório.
Cheque seu entendimento
Um programa roda sem erro mas devolve o resultado errado. Isso é:
Leia por partes
Do detalhe para o todo
Técnica prática: reduza. Comente metade do código, rode, e veja se o erro continua. Em três ou quatro cortes você isola a linha culpada. Isso se chama busca binária de bug e vale mais que qualquer palpite.
Aprenda a diagnosticar
Erros comuns e como corrigi-los
- 1Ler só a primeira linha do erro e ignorar o tipo na última.
- 2Mudar código aleatoriamente até 'parar de reclamar'.
- 3Capturar exceções com um except vazio e esconder o problema real.
Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
O que você aprendeu
- Mensagem de erro não é castigo: é a única parte do computador que está tentando te ajudar. Ela quase sempre diz o tipo do problema, a linha e o valor que causou tudo.
- O primeiro erro grita. O segundo fica quieto e entrega 3.0 em vez de 2.0 — por isso testar valores conhecidos é obrigatório.
- Evite: Ler só a primeira linha do erro e ignorar o tipo na última.
- Evite: Mudar código aleatoriamente até 'parar de reclamar'.
Videoaulas sobre este tema
Se você aprende melhor assistindo, abrimos uma seleção de aulas em vídeo em português sobre exatamente este assunto.
Quiz rápido
0/2 • 0 certas1. Em um stack trace, qual linha costuma interessar mais?
2. Um programa roda sem erro mas devolve o resultado errado. Isso é: