Python obravnava napake z bloki try/except, plus opcijski else in finally. Python sprejema načelo EAFP — "Easier to Ask Forgiveness than Permission" — kar raje poskusi operacijo in obravnava izjeme kot da prej preveri pogoje.
Python obravnava napake z bloki try/except, plus opcijski else in finally. Python sprejema načelo EAFP — "Easier to Ask Forgiveness than Permission" — kar raje poskusi operacijo in obravnava izjeme kot da prej preveri pogoje.
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 — ujame specifične vrste (je boljše kot splošni catch-all).else — se izvedi samo, če nobena izjema ni bila izzvana.finally — se vedno izvedi (čiščenje, sprostitev virov), čak tudi, če se izjema širi naprej.# 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 idiomatično daje prednost EAFP — poskusi operacijo in ujami izjemo — kar se izogne pogojem tekmovanja in je pogosto bolj čisto kot preverjanje vnaprej.
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
Robustna obravnava izjem je bistvena za zanesljive programe, in Pythonov pristop ima karakteristične idiome, ki jih je vredno poznati: struktura try/except/else/finally, filozofija EAFP (poskusi-in-obravnaj namesto preveri-prvo, kar je bolj pythonsko in se izogne pogojem tekmovanja), ujemanje specifičnih izjem (ne splošnega except, ki skriva napake), in uporaba finally/context managers za čiščenje.
Razumevanje tega preprečuje tako sesute iz neobravljenih napak kot tudi subtilne, težko sledljive probleme, ki jih povzroči premalo ozka ali molčeča obravnava izjem — pogost vir nezanesljivega koda.