يتعامل Python مع الأخطاء باستخدام كتل try/except، بالإضافة إلى else وfinally الاختيارية. يتبنى Python مبدأ EAFP — "من الأسهل طلب المسامحة من الإذن" — ويفضل محاولة تنفيذ عملية معينة ومعالجة الاستثناءات بدلاً من التحقق من الشروط أولاً.
يتعامل Python مع الأخطاء باستخدام كتل try/except، بالإضافة إلى else وfinally الاختيارية. يتبنى Python مبدأ EAFP — "من الأسهل طلب المسامحة من الإذن" — ويفضل محاولة تنفيذ عملية معينة ومعالجة الاستثناءات بدلاً من التحقق من الشروط أولاً.
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 — التقط أنواع محددة (أفضل من catch-all عام).else — يعمل فقط إذا لم يتم رفع أي استثناء.finally — يعمل دائماً (التنظيف، تحرير الموارد)، حتى لو انتشر الاستثناء.# 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 بشكل أساسي EAFP — محاولة العملية والتقاط الاستثناء — مما يتجنب conditions race ويكون غالباً أنظف من التحقق المسبق.
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
معالجة الأخطاء القوية ضرورية للبرامج الموثوقة، وأسلوب Python له idioms مميز يستحق معرفته: هيكل try/except/else/finally، فلسفة EAFP (محاولة ومعالجة بدلاً من الفحص أولاً، وهو أكثر pythonic ويتجنب race conditions)، التقاط الاستثناءات المحددة (وليس bare except، الذي يخفي الأخطاء)، واستخدام finally/context managers للتنظيف.
فهم هذه المفاهيم يمنع كلاً من الأعطال من الأخطاء غير المعالجة والمشاكل الدقيقة والصعبة في التصحيح التي تسببها معالجة الاستثناءات الواسعة جداً أو الصامتة — وهي مصدر متكرر للأكواد غير الموثوقة.