معالجة الاستثناءات في Python: دليل شامل
الأخطاء جزء لا يتجزأ من تطوير البرمجيات. حتى الكود الأكثر دقة قد يواجه ظروفًا غير متوقعة: ملف مفقود، القسمة على صفر، مشاكل في الاتصال بالشبكة، وغيرها. لمنع تعطل البرنامج في هذه الحالات، توفر Python آلية قوية لمعالجة الاستثناءات تعتمد على بنية try-except-finally.
كيف تعمل بنية try-except-finally في Python؟
تسمح لك بنية try-except-finally بالتقاط الاستثناءات التي تحدث أثناء تنفيذ البرنامج، والاستجابة لها بشكل صحيح.
الصيغة العامة:
try:
# الكود الذي قد يسبب استثناءً
except SomeException:
# كود معالجة الاستثناء
finally:
# كود سيتم تنفيذه في جميع الأحوال
شرح عمل الكتل:
try: في هذه الكتلة يتم وضع الكود الرئيسي الذي قد ينشأ فيه استثناء.except: هنا يتم تحديد ما يجب فعله في حالة حدوث استثناء في كتلةtry. يمكن تحديد نوع معين من الاستثناء (SomeException) لالتقاطه.finally: يتم تنفيذ كتلةfinallyدائمًا، بغض النظر عما إذا كان قد تم إنشاء استثناء في كتلةtryأم لا. تُستخدم عادةً لتحرير الموارد، مثل إغلاق الملفات أو اتصالات الشبكة أو قواعد البيانات.
مثال على استخدام try-except-finally
try:
number = int(input("أدخل رقمًا صحيحًا: "))
result = 10 / number
print(f"النتيجة: {result}")
except ZeroDivisionError:
print("خطأ: القسمة على صفر غير مسموح بها.")
except ValueError:
print("خطأ: يرجى إدخال رقم صحيح صالح.")
finally:
print("انتهاء تشغيل البرنامج.")
كيف يعمل هذا الكود:
- يطلب البرنامج من المستخدم إدخال رقم صحيح.
- إذا أدخل المستخدم
0، يحدث استثناءZeroDivisionError، ويتم تنفيذ كتلةexceptالمناسبة. - إذا أدخل المستخدم رقمًا غير صحيح، يحدث استثناء
ValueError، ويتم تنفيذ كتلةexceptالمناسبة. - يتم تنفيذ كتلة
finallyفي جميع الأحوال، لعرض رسالة انتهاء تشغيل البرنامج.
لماذا نحتاج إلى كتلة finally؟
تضمن كتلة finally تنفيذ الكود المهم بغض النظر عن حدوث استثناء. إليك بعض السيناريوهات الشائعة لاستخدامها:
-
إغلاق الملفات:
file = open("data.txt", "r") try: content = file.read() # معالجة محتوى الملف finally: file.close() # إغلاق الملف بشكل مضمون -
تحرير الموارد: تحرير اتصالات الشبكة، اتصالات قواعد البيانات، والموارد الأخرى التي يجب إغلاقها أو تحريرها بعد الاستخدام.
-
إنهاء التسجيل أو تنظيف البيانات المؤقتة: يمكن استخدام كتلة
finallyلإنهاء الكتابة في ملف السجل أو لحذف الملفات المؤقتة التي تم إنشاؤها أثناء تشغيل البرنامج.
معالجة استثناءات متعددة
في كتلة try واحدة، قد تحدث عدة أنواع مختلفة من الاستثناءات. تقدم Python عدة طرق لمعالجة هذه الحالة:
استخدام عدة كتل except
try:
number = int(input("أدخل رقمًا: "))
result = 100 / number
print(resu