🐍 9.3 Levantando Exceções (raise)
🎯 Objetivo: Aprender a forçar a ocorrência de exceções personalizadas ou re-lançar erros capturados para controle refinado do fluxo de execução.
🏗️ O Conceito: A Instrução raise
Diferente do try/except (que captura erros), o comando raise é utilizado para disparar uma exceção intencionalmente. Isso é útil para validar regras de negócio ou interromper a execução quando uma condição crítica não for atendida.
Quando usar?
- Quando um parâmetro de função for inválido.
- Para re-lançar uma exceção após realizar um log ou limpeza.
- Para criar suas próprias exceções de domínio.
💻 Mão na Massa
Passo 1: Disparando uma Exceção Simples
Podemos lançar qualquer exceção que herde de BaseException.
# Lançando uma exceção de nome (NameError) com mensagem personalizada
raise NameError('Operação inválida no sistema')Saída no Console:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: Operação inválida no sistemaPasso 2: Re-lançando Exceções (Rethrow)
Às vezes, queremos capturar um erro, fazer algo (como imprimir uma mensagem) e deixá-lo seguir adiante para que o chamador original lide com ele.
try:
raise NameError('Erro de origem')
except NameError:
print('🚨 Log: Registrando erro antes de re-lançar...')
raise # Lança novamente a mesma exceção capturada✅ Resultado Esperado
Ao utilizar o raise, a execução do programa é interrompida no ponto exato da chamada, e o interpretador Python sobe a pilha de execução (stack trace) procurando por um bloco except correspondente.
Boas Práticas
Use
raisesem argumentos dentro de um blocoexceptpara re-lançar a exceção original preservando o stack trace original.
🚨 Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
TypeError: exceptions must derive from BaseException | Tentar dar raise em uma string ou número. | Sempre instancie uma classe de exceção (ex: ValueError()). |
| Esconder erros | Capturar com except e não dar raise. | Se você não sabe lidar com o erro, re-lance-o. |