🐍 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 ZeroDivisionPasso 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
returndentro dotryouexcept, o blocofinallyserá executado antes da função de fato retornar o valor.
🚨 Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
SyntaxError | Ordem incorreta (colocar else após finally). | A ordem deve ser: try → except → else → finally. |
Esquecer o finally | Deixar recursos abertos em caso de erro. | Sempre use finally para operações críticas de encerramento. |