Python/Tratamento de Erros/Tratamento de Erros
Python⏱ ~2 min de leitura

Tratamento de Erros

try, except e finally

Python usa try/except/else/finally para tratamento de exceções. Diferente de Java, Python usa except em vez de catch. O bloco else é executado quando nenhuma exceção ocorre. finally executa sempre, com ou sem exceção.

Exceções em Python formam uma hierarquia. Exception é a base da maioria — nunca capture BaseException ou Exception sem relançar, pois isso oculta erros. Capture sempre a exceção mais específica possível.

raise lança uma exceção manualmente. raise sem argumentos relança a exceção atual dentro de um except. É possível encadear exceções com raise NovExcecao from excecao_original para preservar o contexto.

Exemplo.java
# Tratamento básico
try:
    resultado = 10 / 0
except ZeroDivisionError:
    print("Divisão por zero!")
except (TypeError, ValueError) as e:
    print(f"Tipo ou valor inválido: {e}")
except Exception as e:
    print(f"Erro inesperado: {e}")
    raise  # relança — não engole silenciosamente
else:
    print("Sucesso! Nenhuma exceção.")
finally:
    print("Sempre executa — fechar recursos aqui")

# Lançando exceções
def dividir(a, b):
    if b == 0:
        raise ValueError("Divisor não pode ser zero")
    return a / b

# Encadeamento de exceções
try:
    dados = int("abc")
except ValueError as e:
    raise RuntimeError("Falha ao processar dados") from e

# Exceção customizada
class SaldoInsuficienteError(ValueError):
    def __init__(self, saldo, valor):
        self.saldo = saldo
        self.valor = valor
        super().__init__(f"Saldo {saldo} insuficiente para sacar {valor}")

# Uso
try:
    raise SaldoInsuficienteError(100, 200)
except SaldoInsuficienteError as e:
    print(e.saldo, e.valor)
💡 Dica pro

Nunca use `except:` ou `except Exception: pass` — isso oculta bugs silenciosamente. Sempre logue ou relance exceções.

Recompensa+35 XP+exercícios