Python zpracovává chyby pomocí bloků try/except a volitelných else a finally. Python uplatňuje princip EAFP — "Je snadnější prosit odpuštění než svolení" — preferuje pokus o operaci a zpracování výjimek namísto prvního ověření podmínek.
Python zpracovává chyby pomocí bloků try/except a volitelných else a finally. Python uplatňuje princip EAFP — "Je snadnější prosit odpuštění než svolení" — preferuje pokus o operaci a zpracování výjimek namísto prvního ověření podmínek.
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 — zachytit specifické typy (lepší než generické zachycení všeho).else — běží pouze pokud nebyla vyvolána žádná výjimka.finally — vždy běží (vyčištění, uvolnění zdrojů), i když se výjimka šíří.# 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 idiopaticky preferuje EAFP — pokus o operaci a zachycení výjimky — což se vyhne race conditions a je často čistší než předběžné ověření.
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
Robustní zpracování chyb je nezbytné pro spolehlivé programy a Pythonův přístup má charakteristické idiomy, které stojí za poznání: struktura try/except/else/finally, filozofie EAFP (pokus a zpracování spíše než ověření jako první, což je více pythonovské a vyhýbá se race conditions), zachycení specifických výjimek (ne holý except, který skrývá chyby), a použití finally/context managers pro vyčištění.
Porozumění těmto principům zabraňuje jak selháním z neošetřených chyb, tak jemným a obtížně laditelnými problémy způsobeným příliš širokým nebo tichým zpracováním výjimek — časté zdroji nespolehlivého kódu.