تكرار السؤال: …
الإجابة المختصرة
يعالج except الاستثناء المطابق، ويُنفذ else فقط عند نجاح try بلا استثناء، ويُنفذ finally دائمًا سواء نجحت العملية أو فشلت.
الشرح
ضع داخل try الكود الذي تتوقع فشله فقط، وانقل ما بعده إلى else؛ حتى لا تلتقط بالخطأ استثناءً من كود النجاح ظنًا أنه من العملية الأصلية. يناسب finally التنظيف مثل إغلاق الملفات وتحرير الأقفال، لكن مدير السياق (with) غالبًا أوضح. وتجنب return داخل finally لأنه يبتلع الاستثناء الجاري، وتطلق Python 3.14 تحذيرًا عند ذلك (PEP 765).
مثال بالكود
try:
value = int(text)
except ValueError:
value = None
else:
audit(value) # لا يُنفذ إن فشل التحويل
finally:
release_lock() # يُنفذ دائمًاأخطاء شائعة
- وضع كتلة كبيرة من الكود داخل try فتلتقط استثناءات لم تقصدها.
- استخدام return داخل finally مما يخفي الاستثناء الأصلي.