Python trata erros com blocos try/except, mais else e finally opcionais. Python abraça o princípio EAFP — "Easier to Ask Forgiveness than Permission" — preferindo tentar uma operação e tratar exceções em vez de verificar condições primeiro.
Python trata erros com blocos try/except, mais else e finally opcionais. Python abraça o princípio EAFP — "Easier to Ask Forgiveness than Permission" — preferindo tentar uma operação e tratar exceções em vez de verificar condições primeiro.
try:
result = risky_operation()
except ValueError as e: # catch a SPECIFIC exception type
print(f"bad value: {e}")
except (KeyError, IndexError): # catch multiple types
print("lookup failed")
except Exception as e: # catch-all (use sparingly, last)
print(f"unexpected: {e}")
else:
print("ran only if NO exception occurred")
finally:
cleanup() # ALWAYS runs (success or failure)
except SpecificError — captura tipos específicos (preferível a um catch-all genérico).else — executa apenas se nenhuma exceção foi levantada.finally — sempre executa (limpeza, liberação de recursos), mesmo se uma exceção se propaga.# LBYL ("Look Before You Leap") — check first
if key in my_dict:
value = my_dict[key]
# EAFP ("Easier to Ask Forgiveness") — try it, handle failure — more Pythonic
try:
value = my_dict[key]
except KeyError:
value = default
Python idiomaticamente favorece EAFP — tente a operação e capture a exceção — que evita condições de corrida e é frequentemente mais limpo do que pré-verificação.
if amount < 0:
raise ValueError("amount must be positive") # raise a built-in
class InsufficientFundsError(Exception): # custom exception type
pass
raise InsufficientFundsError("balance too low")
# ❌ bare except hides bugs (catches EVERYTHING, even typos/KeyboardInterrupt)
try: ...
except: pass
# ✅ catch specific exceptions; re-raise what you can't handle
try: ...
except ValueError as e:
logger.error(e)
raise # re-raise to propagate
✓ Catch SPECIFIC exceptions, not bare except
✓ Don't silently swallow errors (except: pass) — log or handle them
✓ Use finally / context managers (with) for cleanup
✓ Raise meaningful, specific exception types
O tratamento robusto de exceções é essencial para programas confiáveis, e a abordagem do Python tem idiomas distintos que valem a pena conhecer: a estrutura try/except/else/finally, a filosofia EAFP (tente-e-trate em vez de verifique-primeiro, que é mais Pythônico e evita condições de corrida), capturar exceções específicas (não except genérico, que oculta bugs), e usar finally/context managers para limpeza.
Entender isso previne tanto travamentos de erros não tratados quanto os problemas sutis e difíceis de debugar causados por tratamento de exceção muito amplo ou silencioso — uma fonte frequente de código não confiável.