معالجة الاستثناءات في بايثون: المحاولة، والاستثناء، وأخيراً

تُعد معالجة الاستثناءات جزءًا أساسيًا من البرمجة، وتوفر Python آلية قوية لمعالجة الاستثناءات. في Python، تُستخدم الكتل try وexcept وfinally للقبض على الاستثناءات ومعالجتها، مما يضمن عدم تعطل البرنامج بشكل غير متوقع. ستستكشف هذه المقالة كيفية استخدام هذه الكتل بشكل فعال لمعالجة الأخطاء في برامج Python الخاصة بك.

ما هي الاستثناءات؟

الاستثناءات هي أخطاء تحدث أثناء تنفيذ البرنامج. وعلى عكس أخطاء بناء الجملة، التي يكتشفها المترجم قبل تشغيل البرنامج، تحدث الاستثناءات أثناء تشغيل البرنامج. على سبيل المثال، محاولة قسمة رقم على صفر أو الوصول إلى فهرس غير موجود في قائمة سيؤدي إلى حدوث استثناء.

البنية الأساسية لـ try و except

يتم استخدام كتلة try لتغليف التعليمات البرمجية التي قد تتسبب في حدوث استثناء. في حالة حدوث استثناء، ينتقل البرنامج إلى كتلة except للتعامل مع الخطأ. فيما يلي بناء الجملة الأساسي:

try:
    # Code that might throw an exception
    risky_code()
except ExceptionType:
    # Code that runs if an exception occurs
    handle_exception()

في هذا الهيكل:

  • try: تحتوي هذه الكتلة على الكود الذي قد يتسبب في حدوث استثناء.
  • except: يتم تنفيذ هذه الكتلة إذا حدث استثناء في كتلة try. يمكنك تحديد نوع الاستثناء الذي سيتم التقاطه.

معالجة الاستثناءات المتعددة

يمكنك التعامل مع استثناءات متعددة في بايثون من خلال تحديد كتل except متعددة. وهذا مفيد عندما تريد التعامل مع استثناءات مختلفة بشكل مختلف. فيما يلي مثال:

try:
    x = int(input("Enter a number: "))
    result = 10 / x
except ValueError:
    print("Invalid input. Please enter a valid number.")
except ZeroDivisionError:
    print("You cannot divide by zero.")

في هذا المثال:

  • إذا قام المستخدم بإدخال قيمة غير صحيحة، فسيتم التقاط خطأ ValueError.
  • إذا أدخل المستخدم صفرًا، فسيتم التقاط ZeroDivisionError.

استخدام كتلة finally

تُستخدم كتلة finally لتنفيذ التعليمات البرمجية التي يجب تشغيلها بغض النظر عما إذا كان قد تم طرح استثناء أم لا. تُستخدم غالبًا لإجراءات التنظيف، مثل إغلاق الملفات أو تحرير الموارد. وإليك كيفية عملها:

try:
    file = open("example.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("The file was not found.")
finally:
    file.close()
    print("File closed.")

في هذا المثال، تضمن الكتلة finally إغلاق الملف سواء حدث استثناء أم لا.

استخدام الكتلة else

يسمح Python أيضًا بكتلة اختيارية else يتم تشغيلها إذا لم يتم إثارة أي استثناءات في كتلة try. يجب أن تتبع كتلة else جميع كتل except:

try:
    x = int(input("Enter a number: "))
    result = 10 / x
except ZeroDivisionError:
    print("You cannot divide by zero.")
else:
    print("Division successful:", result)
finally:
    print("Execution complete.")

في هذا الكود:

  • إذا كان التقسيم ناجحًا، سيتم تنفيذ الكتلة else.
  • سيتم تشغيل الكتلة وأخيرًا بغض النظر عن النتيجة.

أفضل الممارسات للتعامل مع الاستثناءات

  • قم دائمًا بالتقاط استثناءات محددة بدلاً من استثناء عام Exception لتجنب إخفاء الأخطاء.
  • استخدم وأخيرًا لتحرير الموارد مثل الملفات واتصالات الشبكة وما إلى ذلك.
  • تجنب استخدام الاستثناءات للتحكم في التدفق؛ يجب استخدام الاستثناءات للحالات الاستثنائية فقط.
  • توفير رسائل ذات معنى عند التقاط الاستثناءات للمساعدة في تصحيح الخطأ وفهمه.

خاتمة

توفر كتل try وexcept وfinally في Python أدوات قوية للتعامل مع الاستثناءات والأخطاء بسلاسة. إن فهم كيفية استخدامها بشكل فعال يمكن أن يساعدك في بناء تطبيقات Python أكثر قوة وقابلية للصيانة. تأكد من اتباع أفضل الممارسات للتعامل مع الاستثناءات بشكل صحيح وتجنب الأخطاء الشائعة.