🐍 9.5 Para Saber Mais: Cláusulas Finally e Else

🎯 Objetivo: Compreender as instruções else e finally para gerenciar ações de limpeza e fluxos alternativos no tratamento de exceções.

🏗️ O Conceito: Fluxo de Exceção Completo

Em Python, a estrutura try pode ser expandida para garantir que certas ações (como fechar conexões ou arquivos) sempre ocorram, independentemente de erros.

  • else: Executado apenas se não houver exceção.
  • finally: Executado sempre, ocorrendo erro ou não.

💻 Mão na Massa

Passo 1: Unificando o Fluxo de Decisão

Veja como uma função de divisão segura utiliza todos os componentes:

def divisao(x, y):
    try:
        resultado = x / y
    except ZeroDivisionError:
        print("🚨 Erro: Divisão por zero!")
    else:
        print(f"✅ O resultado é: {resultado}")
    finally:
        print("🧹 Executando limpeza do bloco (finally)...")
 
# Testes
divisao(2, 1) # Sucesso
divisao(2, 0) # Erro de ZeroDivision

Passo 2: Analisando o Erro de Tipo

Se passarmos tipos incompatíveis (como strings), o Python lançará um TypeError.

# Lançará TypeError: unsupported operand type(s) for /: 'str' and 'str'
divisao('2', '1')

Traceback Esperado:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "main.py", line 3, in divisao
    resultado = x / y
TypeError: unsupported operand type(s) for /: 'str' and 'str'

✅ Resultado Esperado

O bloco finally é essencial em aplicações reais para liberar recursos externos (arquivos, bancos de dados, sockets), garantindo a estabilidade operacional do sistema.

Regra de Ouro

Mesmo que você use return dentro do try ou except, o bloco finally será executado antes da função de fato retornar o valor.


🚨 Erros Comuns

ErroCausaSolução
SyntaxErrorOrdem incorreta (colocar else após finally).A ordem deve ser: try except else finally.
Esquecer o finallyDeixar recursos abertos em caso de erro.Sempre use finally para operações críticas de encerramento.

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