Módulo 14 - Tratamento básico de erros

Usando try e except: tratando o erro esperado

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

O que você vai aprender

  • Entender o fluxo do try/except: tentar o arriscado, capturar a falha esperada.
  • Escrever um except específico para ValueError em código de conversão.
  • Explicar por que capturar tudo com except puro esconde defeitos.
  • Saber que else, finally e raise existem, e onde eles entram na trilha.

A ideia: tentar o arriscado com plano B pronto

Pense no programa mais comum deste curso: pedir um número com input e converter com int. Você já sabe o que acontece quando alguém digita banana: ValueError, traceback, programa morto. Para um script seu, paciência, é rodar de novo. Para um programa que outra pessoa usa, é inaceitável: ninguém merece tela de erro por causa de um dedo errado. O try/except existe para esse cenário: uma operação que PODE falhar por motivos fora do seu controle.

texto = input("Digite a sua idade: ")
try:
    idade = int(texto)
    print(f"Daqui a dez anos você terá {idade + 10} anos.")
except ValueError:
    print("Isso não parece um número inteiro. Tente algo como 25.")

O try tenta a conversão arriscada; se vier ValueError, o except responde com educação em vez de traceback.

O fluxo tem duas rotas, e só uma executa. Rota feliz: o usuário digita 25, a conversão funciona, o print de dentro do try roda e o except é ignorado por completo. Rota do erro: o usuário digita banana, a linha int(texto) levanta ValueError, o Python abandona o resto do bloco try na hora e pula direto para o except correspondente. Em nenhuma das rotas aparece traceback, porque o erro esperado foi capturado antes de derrubar o programa.

Capture só o erro esperado

Repare que o exemplo escreveu except ValueError, com o nome do erro, e não except sozinho. Essa escolha é a diferença entre tratamento de erro e tapete para esconder sujeira. O except puro, sem nome, captura QUALQUER exceção que aconteça dentro do try: a que você esperava e todas as que você não esperava, incluindo os seus próprios erros de digitação.

try:
    idade = int(textoo)  # NameError escondido: o nome certo era texto
    print("Idade registrada.")
except:
    print("Digite um número válido.")  # mente para o usuário E para você

O except puro capturou um NameError de digitação e o disfarçou de problema do usuário. Esse defeito pode viver semanas sem ser notado.

Veja o estrago em câmera lenta: o programador escreveu textoo em vez de texto, um NameError clássico que o traceback denunciaria na primeira execução. Só que o except puro engoliu o erro e mostrou a mensagem de número inválido, então o programa parece funcionar e culpa o usuário por um defeito interno. Ninguém corrige o que não vê. Por isso a regra deste curso é simples e inegociável: o except sempre leva o nome do erro que você espera. Se dois erros diferentes podem acontecer, escreva dois excepts, um para cada.

else, finally e o que fica para depois

Para fechar, um registro honesto. A estrutura completa do try no Python tem mais duas peças que você vai encontrar por aí: o else, que executa apenas quando o try termina SEM erro, e o finally, que executa sempre, com ou sem erro, e serve para limpeza de recursos como arquivos abertos. Existe também o raise, que faz o caminho inverso: em vez de capturar um erro, lança um de propósito.

Nenhuma das três peças entra nos programas deste curso, e a omissão é proposital: no nível básico, try e except específicos resolvem todos os casos reais que você enfrenta, e empilhar estrutura sem necessidade só confunde. Quando a trilha avançar para arquivos complexos e funções que conversam entre si, else, finally e raise ganham contexto de verdade. Por ora, saiba que existem, reconheça-os quando ler código alheio e siga com a dupla que importa.

  • try: envolve SÓ a operação arriscada, o menor bloco possível.
  • except NomeDoErro: o plano B para o erro específico que você espera.
  • else e finally: existem, completam a estrutura, ficam para a próxima etapa da trilha.
  • raise: lança erros de propósito; mesma promessa, mesma etapa futura.

Na próxima aula, tudo isso sai do laboratório e vai para o mundo: você vai pegar a calculadora do módulo 6, aquela que caía com qualquer letra no lugar de número, e blindá-la de ponta a ponta com try/except e loops de validação. É o padrão profissional de leitura de dados, e vai direto para o seu projeto final.

Teste rápido

Por que escrever except ValueError em vez de except sozinho ao tratar a conversão de um input?

Perguntas frequentes

O try/except deixa o programa mais lento?
Na prática do seu nível, não. Quando nenhum erro acontece, o custo do try no Python é minúsculo, e programas de terminal passam a vida esperando o usuário digitar. Escreva pensando em clareza e segurança; desempenho desse tipo é preocupação para outra fase.
Posso ter mais de um except para o mesmo try?
Pode, e é o jeito certo de tratar riscos diferentes: um except ValueError para conversão e um except ZeroDivisionError para divisão, cada um com a sua mensagem. O Python executa apenas o bloco que corresponde ao erro que aconteceu.
O que acontece se o erro que estourar não for o do meu except?
O except não captura, e o erro sobe como se o try não existisse: traceback na tela e programa interrompido. Esse comportamento é desejável: erro inesperado deve aparecer para ser corrigido, não sumir em silêncio.
Devo envolver o programa inteiro num try para garantir?
Não. O bloco try deve conter só a operação arriscada, de preferência uma ou duas linhas. Um try gigante mistura riscos diferentes, dificulta saber qual linha falhou e empurra você para o except genérico, que é justamente a má prática a evitar.
Como sei qual erro colocar no except?
Provoque a falha de propósito antes de tratar: rode o código com a entrada ruim e leia o tipo na última linha do traceback. Se int(input()) com uma letra gera ValueError, é ValueError que entra no except. O traceback é a fonte da verdade, não a memória.
try/except substitui a validação com if que aprendi antes?
Não substitui; convivem. O if valida o que dá para conferir antes, como um divisor igual a zero. O try/except cuida do que só se descobre tentando, como converter o texto do usuário. Na prática da próxima aula você usa as duas técnicas lado a lado.

Fontes

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