Saltar para o conteúdo principal
Noções básicas de Python2026-07-29 · 9 min de leitura

Tratamento de erros Python: tente/exceto/else/finalmente em 2026

O tratamento de erros separa o “código que funciona na sua máquina” do “código que sobrevive à produção”. O try / except do Python parece simples, mas a forma completa de quatro palavras-chave - try / except / else / finally - codifica uma quantidade surpreendente de estrutura que a maioria dos tutoriais ignora.

Este guia aborda: o que cada palavra-chave realmente significa, os seis padrões que você verá em cada base de código de back-end, quando definir suas próprias exceções e os três antipadrões que permitem que bugs escapem de seus testes.

As quatro palavras-chave, precisamente

▶ PYTHONeditable · runs in your browser

A cláusula else é subutilizada. Diz "a próxima parte depende do sucesso da tentativa, mas não quero que ela seja protegida pela mesma exceção". É o lugar certo para a continuação do caminho feliz — colocá-lo dentro de try captura acidentalmente exceções não relacionadas de ship(result).

Os seis padrões

1. Tente novamente em caso de falha transitória

▶ PYTHONeditable · runs in your browser

Regra: tente novamente SOMENTE em erros transitórios (rede, tempo limite, 429, 503). Nunca tente novamente em ValueError, KeyError, TypeError - esses são bugs de código, e tentar novamente apenas executa o bug três vezes.

2. Proteja com else

▶ PYTHONeditable · runs in your browser

O else garante que file foi aberto com sucesso E delimita a limpeza com with. Aviso: process() pode gerar ValueError — que será propagado, NÃO será capturado por except FileNotFoundError.

3. Limpeza com finally (antes de with existir)

▶ PYTHONeditable · runs in your browser

No código moderno, você usaria with db.connect() as conn: - with é o açúcar sobre try / finally para o caso de limpeza comum. Alcance o finally explícito somente quando o recurso não suportar o protocolo do gerenciador de contexto.

4. Aumente novamente com contexto adicional

▶ PYTHONeditable · runs in your browser

raise NewException(...) from e encadeia a exceção original na nova para que o traceback mostre AMBOS. Nunca escreva raise NewException(str(e)) — isso descarta o traceback original.

5. Capture a exceção mais restrita possível

▶ PYTHONeditable · runs in your browser

Regra: quanto mais restrito o exceto, melhor. Se você não sabe o que o process pode gerar, execute-o e descubra. except Exception: é um cheiro de código 90% das vezes.

6. raise dentro de except — re-raise limpo

▶ PYTHONeditable · runs in your browser

Bare raise mantém o traceback original intacto. Nunca raise e (Python 3 é inteligente sobre isso, mas raise é a forma idiomática).

Exceções personalizadas — quando vale a pena

Defina sua própria classe de exceção quando:

1. Os chamadores precisam except MyError: especificamente (ou seja, você tem uma API que pode ser chamada e os usuários precisam ramificar de acordo com o tipo de falha).

2. Sua biblioteca/serviço gera vários erros relacionados que compartilham contexto.

▶ PYTHONeditable · runs in your browser

Agora os chamadores podem capturar de forma ampla (except PaymentError) ou restrita (except CardDeclinedError). Atributos estruturados na exceção (e.card_last4) permitem que manipuladores de erros criem UX útil sem analisar mensagens de exceção.

Antipadrão: definir uma exceção personalizada que só existe para ser gerada uma vez e nunca capturada. Isso é apenas raise ValueError("..."). As exceções personalizadas ganham peso por serem capturadas.

Três antipadrões que escondem bugs

Antipadrão 1: Nu, exceto

▶ PYTHONeditable · runs in your browser

Bare except captura sinais que devem sair do programa (Ctrl-C, sys.exit, MemoryError). Nunca escreva isso. Se você realmente deseja capturar todas as exceções não fatais, use except Exception: — que AINDA captura demais, mas pelo menos respeita Ctrl-C.

Antipadrão 2: Silenciar sem registrar

▶ PYTHONeditable · runs in your browser

Cada exceção capturada deve ser tratada (com um fallback específico) ou registrada em log. pass em um exceto é um bug em câmera lenta - o código parece funcionar enquanto descarta dados silenciosamente.

▶ PYTHONeditable · runs in your browser

Antipadrão 3: except Exception: em torno de tudo

▶ PYTHONeditable · runs in your browser

Problema: se stripe.charge foi bem-sucedido, mas send_receipt falhou, o cliente foi cobrado E você engoliu o erro. O except cobre quatro modos de falha diferentes, e você não pode diferenciá-los.

Correção: estreitar o escopo try + ramificar o limite exceto pelo módulo.

▶ PYTHONeditable · runs in your browser

Cada tentativa cobre UMA operação. Cada um, exceto sabe o que fazer com ESTA falha específica. Esse é o tratamento de erros de nível de produção.


Um bom tratamento de erros envolve mais design do que sintaxe. try / except / else / finally fornece as ferramentas; a disciplina é escolher o tipo de exceção correto, o escopo de tentativa mais restrito possível e nunca silenciar erros que você não entende.

Próxima etapa: o curso Foundations tem 10 lições sobre tratamento de exceções, exceções personalizadas e a instrução with — com Python real sendo executado em seu navegador.

Pronto para experimentar?

15 aulas gratuitas após uma inscrição gratuita - sem cartão. Experimente a plataforma e depois decida.

Comece gratuitamente →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.