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.

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 str

TypeError: 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 zero

A 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.

ErroCausa típicaCorreção
SyntaxErrorGrafia quebrada: parêntese ou aspas sem fechar, dois-pontos esquecidoLer a linha apontada e conferir os símbolos; nada roda até consertar
NameErrorNome que não existe, quase sempre erro de digitaçãoConferir a grafia e as maiúsculas; aproveitar a sugestão Did you mean
TypeErrorTipos incompatíveis na operação, como texto somado com númeroConverter antes com int(), float() ou str()
ValueErrorTipo certo com valor impossível, como int("abc")Validar o dado ou tratar com try/except (aula 4)
ZeroDivisionErrorDivisor valendo zero, geralmente vindo de input ou contadorConferir 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.