Especialização em Sistemas com Python & POO com Type Hints • Capítulo 11


🗺️ Mapa Conceitual do Tópico

flowchart TD
    A["Operação de Risco"] --> B{"try / except"}
    B -->|Exceção de Negócio| C["Captura ExcecaoDominio"]
    B -->|Múltiplos Erros em Lote| D["Captura ExceptionGroup (PEP 654)"]
    B -->|Sucesso Total| E["Cláusula else: Prosseguir"]
    C & D & E --> F["Cláusula finally: Fechar Recursos"]
    
    style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
    style C fill:#ffebee,stroke:#f44336,stroke-width:2px
    style D fill:#ede7f6,stroke:#7e57c2,stroke-width:2px
    style E fill:#e8f5e9,stroke:#4caf50,stroke-width:2px

🛡️ 1. Tratamento Defensivo e Hierarquia de Exceções

O tratamento de exceções em Python é estruturado em try-except-else-finally:

  • else: Executado somente se nenhuma exceção ocorrer no bloco try.
  • finally: Executado incondicionalmente para liberação de recursos.
  • raise NovoErro() from erro_original: Encadeamento de exceções (Exception Chaining / PEP 3134).
  • ExceptionGroup (Python 3.11+ / PEP 654): Agrupa múltiplas exceções ocorridas em tarefas concorrentes ou processamento em lote.

💻 Exemplo Prático e Tipado

"""
exemplo_11_tratamento_de_excecoes.py - Exceções de Domínio e Encadeamento
"""


class SaldoInsuficienteError(Exception):
    """Exceção de domínio disparada quando o saque excede o saldo."""
    def __init__(self, saldo_atual: float, valor_saque: float) -> None:
        super().__init__(f"Saldo insuficiente ({saldo_atual:.2f}) para o saque solicitado ({valor_saque:.2f}).")
        self.saldo_atual = saldo_atual
        self.valor_saque = valor_saque


def realizar_debito(saldo: float, valor: float) -> float:
    if valor > saldo:
        raise SaldoInsuficienteError(saldo, valor)
    return saldo - valor


if __name__ == "__main__":
    try:
        novo_saldo = realizar_debito(saldo=100.0, valor=250.0)
    except SaldoInsuficienteError as err:
        print(f"[FALHA DE NEGÓCIO] {err}")

🔗 Recursos Pedagógicos do Capítulo 11

Recurso Didático Finalidade Link de Acesso
📊 Slides de Aula Apresentação visual interativa com Dark Mode e suporte a teclado Ver Slides
🧠 Quiz Formativo Teste interativo de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos de Código Demonstrações funcionais com Type Hints e saída no console Ver Exemplos
🧩 Exercícios em 4 Níveis Lista progressiva de fixação com gabarito em bloco colapsável Resolver Exercícios

📜 Capítulo Anterior 📚 Sumário de Tópicos 📁 Próximo Capítulo