🐍 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 sistema

Passo 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 raise sem argumentos dentro de um bloco except para re-lançar a exceção original preservando o stack trace original.


🚨 Erros Comuns

ErroCausaSolução
TypeError: exceptions must derive from BaseExceptionTentar dar raise em uma string ou número.Sempre instancie uma classe de exceção (ex: ValueError()).
Esconder errosCapturar com except e não dar raise.Se você não sabe lidar com o erro, re-lance-o.

⬅️ Capítulo Anterior | Próximo Capítulo ➡️