0Pricing
Python Academy · درس

try / except / else / finally

نظّم كتل معالجة الاستثناءات لمختلف السيناريوهات

try / except / else / finally درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

مقدمة

تمنحك بنية Python try/except/else/finally تحكمًا كاملًا في معالجة الأخطاء والتنظيف.

try/except الأساسية

try: risky_code() except ExceptionType: handle() — تنفذ Python كتلة except فقط عند رفع ذلك النوع من الاستثناءات.
try:
    x = int('abc')
except ValueError:
    print('not a number')

التقاط كائن الاستثناء

يربط except ValueError as e الاستثناء بالاسم e. استخدم str(e) أو e.args للحصول على الرسالة.
try:
    int('oops')
except ValueError as e:
    print(f'Error: {e}')

التقاط استثناءات متعددة

يلتقط except (TypeError, ValueError) as e أيًّا من النوعين.
for val in ['abc', None, 42]:
    try:
        print(int(val))
    except (TypeError, ValueError) as e:
        print(f'skipping {val!r}: {e}')

except المجردة (تجنبها)

تلتقط except: (من دون تحديد نوع) كل شيء، بما في ذلك KeyboardInterrupt وSystemExit. وهذا خطأ في معظم الحالات، لذا حدّد الأنواع دائمًا.
try:
    risky = 1/0
except ZeroDivisionError:
    print('division error')  # specific

عبارات except متعددة

يمكنك استخدام عدة كتل except، تتولى كل منها معالجة نوع مختلف. وتجربها Python بالترتيب.
def process(val):
    try:
        return 10 / int(val)
    except ValueError:
        print('not a number')
    except ZeroDivisionError:
        print('division by zero')
process('abc')
process('0')

عبارة else

في try/except/else، تُنفذ else فقط إذا لم يُرفع أي استثناء. استخدمها للتعليمات البرمجية التي يجب تشغيلها عند النجاح.
try:
    x = int('42')
except ValueError:
    print('bad input')
else:
    print('parsed:', x)

عبارة finally

تُنفذ finally دائمًا، بعد نجاح try أو بعد except وحتى بعد return أو break. وهي مثالية لأعمال التنظيف.
def read_file(path):
    f = None
    try:
        f = open(path)
        return f.read()
    except FileNotFoundError:
        return None
    finally:
        if f: f.close()
print(read_file('/nonexistent'))

finally مع return

إذا وُجدت كل من return وfinally، تُنفذ finally أولًا، لكن قيمة الإرجاع من finally هي التي تسود. فاحذر من ذلك.
def demo():
    try:
        return 'try'
    finally:
        return 'finally'  # overrides!
print(demo())

كتل try متداخلة

يمكن تداخل كتل try. ينتقل الاستثناء الداخلي إلى الخارج إذا لم تلتقطه كتلة except الداخلية.
try:
    try:
        x = 1/0
    except ValueError:
        print('inner')
except ZeroDivisionError:
    print('outer caught it')

تسجيل الاستثناءات

يسجل import logging; logging.exception('msg') تتبّع الاستثناء كاملًا. وهو مثالي في تعليمة الإنتاج البرمجية.
import logging
try:
    1/0
except ZeroDivisionError:
    logging.exception('Caught an error')

تحقق سريع

أي عبارة تُنفذ بغض النظر عن حدوث استثناء من عدمه؟

مراجعة

تلتقط try/except الأخطاء. وتُنفذ else عند النجاح. وتُنفذ finally دائمًا لأغراض التنظيف. التقط أنواعًا محددة وتجنب except المجردة. استخدم as e للوصول إلى الاستثناء.

تابع التقدم

أحسنت! انتقل إلى الدرس التالي لمواصلة تقدمك.

الأسئلة الشائعة

هل درس «try / except / else / finally» مجاني؟

نعم — نص درس «try / except / else / finally» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «try / except / else / finally»؟

نظّم كتل معالجة الاستثناءات لمختلف السيناريوهات تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «try / except / else / finally»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فهم الاستثناءات
  2. try / except / else / finally
  3. رفع الاستثناءات وإعادة رفعها
  4. فئات الاستثناءات المخصصة
← العودة إلى Python Academy