Módulo 14 - Tratamento básico de erros
TypeError, ValueError e a turma dos erros mais comuns
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Diferenciar TypeError (tipo incompatível) de ValueError (tipo certo, valor impossível).
- Reconhecer o NameError como sintoma clássico de erro de digitação.
- Entender de onde vem o ZeroDivisionError e por que a culpa raramente é da divisão.
- Consultar a tabela dos cinco erros mais comuns com causa e correção.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: TypeError, ValueError e a turma dos erros mais comuns.
Os objetivos desta aula. Diferenciar TypeError (tipo incompatível) de ValueError (tipo certo, valor impossível). Reconhecer o NameError como sintoma clássico de erro de digitação. Entender de onde vem o ZeroDivisionError e por que a culpa raramente é da divisão. Consultar a tabela dos cinco erros mais comuns com causa e correção.
Veja o essencial, parte por parte.
TypeError versus ValueError: tipo ou conteúdo?. TypeError: a operação não aceita aquele TIPO de dado, como somar "texto" + 5.
NameError e ZeroDivisionError: os outros dois da turma. Esquecer que input() SEMPRE devolve texto e somar direto: TypeError garantido.
A tabela dos cinco: causa e correção. Somando o SyntaxError da aula 1 aos quatro desta aula, temos o time que responde pela grande maioria das quebras de programa no nível básico.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
TypeError versus ValueError: tipo ou conteúdo?
Dois erros dominam a vida de quem trabalha com input e conversão, e eles parecem irmãos gêmeos até você olhar de perto. O TypeError reclama do tipo do dado: a operação em si não funciona com aquela categoria de valor, não importa o conteúdo. Somar texto com número é o caso clássico, e você já esbarrou nele no módulo 5.
idade = "25" # input() sempre devolve texto
daqui_dez = idade + 10 # TypeError: can only concatenate str (not "int") to strTypeError: o conteúdo até parece número, mas o TIPO é texto, e texto não soma com int.
Já o ValueError reclama do conteúdo. O tipo estava certo, a função aceita texto de entrada, mas aquele texto específico não serve para a operação pedida. É o que acontece quando int() recebe uma palavra: converter texto em número é permitido, desde que o texto contenha um número.
numero = int("25") # funciona: o texto contém um número
numero = int("abc") # ValueError: invalid literal for int() with base 10: 'abc'ValueError: int() aceita texto, mas o valor abc não tem número nenhum para extrair.
TypeError
- O TIPO do dado é incompatível com a operação
- Exemplo: "10" + 5 (texto não soma com número)
- Acontece antes de olhar o conteúdo
- Correção típica: converter com int(), float() ou str()
ValueError
- O tipo serve; o VALOR específico é impossível
- Exemplo: int("abc") (texto sem número dentro)
- Depende do conteúdo que chegou na hora
- Correção típica: validar a entrada ou tratar com try/except
NameError e ZeroDivisionError: os outros dois da turma
O NameError é o mais honesto dos quatro: você usou um nome que o Python não conhece. Em nove de cada dez casos, a causa é erro de digitação, uma letra trocada entre a criação da variável e o uso dela. Lembre que o Python diferencia maiúsculas de minúsculas: nome, Nome e NOME são três variáveis diferentes. As versões atuais até sugerem a correção quando existe um nome parecido.
nome = "Ana"
print(nomme) # NameError: name 'nomme' is not defined. Did you mean: 'nome'?NameError com sugestão: o Python percebeu que nomme parece nome e ofereceu a pista.
O ZeroDivisionError dispensa tradução: divisão por zero, que não existe na matemática nem no Python. O detalhe importante é onde procurar a correção. A linha apontada pelo traceback é a da divisão, mas ela raramente é a culpada; o problema real é o caminho que deixou um zero chegar como divisor. Um usuário que digitou zero itens, uma lista vazia na hora de calcular média, um contador que não andou. A correção quase sempre é conferir o divisor antes de dividir.
soma = 0
quantidade = 0
media = soma / quantidade # ZeroDivisionError: division by zeroA divisão está escrita corretamente; o defeito é a quantidade valendo zero ao chegar aqui.
A tabela dos cinco: causa e correção
Somando o SyntaxError da aula 1 aos quatro desta aula, temos o time que responde pela grande maioria das quebras de programa no nível básico. A tabela abaixo é material de consulta: volte a ela sempre que um traceback aparecer, até decorar pelo uso. Repare que a coluna de correção tem um padrão: erros de escrita se corrigem olhando o código; erros de dado se corrigem validando a entrada ou tratando a exceção, que é o assunto da próxima aula.
| Erro | Causa típica | Correção |
|---|---|---|
| SyntaxError | Grafia quebrada: parêntese ou aspas sem fechar, dois-pontos esquecido | Ler a linha apontada e conferir os símbolos; nada roda até consertar |
| NameError | Nome que não existe, quase sempre erro de digitação | Conferir a grafia e as maiúsculas; aproveitar a sugestão Did you mean |
| TypeError | Tipos incompatíveis na operação, como texto somado com número | Converter antes com int(), float() ou str() |
| ValueError | Tipo certo com valor impossível, como int("abc") | Validar o dado ou tratar com try/except (aula 4) |
| ZeroDivisionError | Divisor valendo zero, geralmente vindo de input ou contador | Conferir o divisor antes de dividir ou tratar a exceção |
Os cinco erros mais comuns do iniciante. Imprima, cole na parede, consulte sem culpa.
Uma observação honesta: o Python tem dezenas de outros tipos de exceção, como IndexError para posições que não existem em listas e KeyError para chaves ausentes em dicionários, que você já viu de relance nos módulos 10 e 11. Não precisa decorar o catálogo inteiro. O método é o mesmo para todos: ler o tipo, ler a mensagem, achar a linha. Os cinco da tabela cobrem o seu dia a dia atual.
Teste rápido
O usuário digitou a palavra "dez" e o programa executou int("dez"). Qual erro o Python levanta?
Perguntas frequentes
- Como decorar a diferença entre TypeError e ValueError?
- Pense em duas perguntas na ordem: a operação aceita essa categoria de dado? Se não, TypeError. Aceita, mas esse conteúdo específico não serve? ValueError. No dia a dia, a dupla int(input()) gera ValueError e a soma de texto com número gera TypeError; esses dois casos cobrem quase tudo.
- Por que o Python não converte o tipo sozinho, como outras linguagens?
- Escolha de projeto: conversão automática esconde erro. Em linguagens que somam texto com número sem reclamar, o defeito passa despercebido e estoura longe da origem. O Python prefere parar na hora e apontar a linha, o que dói menos a longo prazo.
- O que faço quando o NameError aponta um nome que eu tenho certeza que criei?
- Confira três suspeitos, nessa ordem: a grafia exata, incluindo maiúsculas e minúsculas; a ordem das linhas, porque a variável precisa ser criada ANTES do uso; e o escopo, pois variável criada dentro de uma função não existe fora dela, como você viu no módulo 13.
- Existe divisão por zero que não derruba o programa?
- Com números inteiros e floats comuns, não: a operação levanta ZeroDivisionError sempre. A defesa é sua: conferir o divisor com um if antes de dividir, ou envolver a divisão num try/except. As duas técnicas aparecem na prática do fim deste módulo.
- IndexError e KeyError entram em qual família?
- São exceções, ou seja, erros de execução, como os quatro desta aula. IndexError aparece ao acessar uma posição que não existe numa lista, e KeyError ao buscar uma chave ausente num dicionário. O método de leitura do traceback é idêntico.
- Preciso decorar as mensagens em inglês de cada erro?
- Não. Decore os NOMES dos cinco erros da tabela e o que cada um significa; as mensagens você aprende a reconhecer pelo uso. Com o tempo, bate o olho em invalid literal e o cérebro já traduz: texto que não vira número.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.