التعامل مع الأخطاء (Error Handling)

الدرس السابع من بايثون: كيفية التعامل مع الأخطاء أو الاستثناءات (Exceptions) في البرامج.

تعلم بايثون

February 5, 2025

Error Handling (Exception Handling)

الدرس السابع: التعامل مع الأخطاء (Error Handling)

مرحبًا بك في الدرس السابع من سلسلة تعلم لغة بايثون! في هذا الدرس، سنركز على كيفية التعامل مع الأخطاء أو الاستثناءات (Exceptions) في البرامج. التعامل مع الأخطاء هو جزء مهم جدًا من البرمجة لأنه يساعدك على التحكم في السلوك الذي يحدث عندما تواجه مشاكل غير متوقعة أثناء تنفيذ البرنامج.

 

1. ما هي الاستثناءات (Exceptions)؟

عندما يحدث خطأ أثناء تنفيذ برنامج بايثون، يتم رفع استثناء (Exception) . إذا لم يتم التعامل مع هذا الاستثناء بشكل صحيح، فإن البرنامج يتوقف عن العمل ويظهر رسالة خطأ.

 

على سبيل المثال:

x = 10 / 0 # خطأ: لا يمكن القسمة على صفر

إذا قمت بتشغيل الكود أعلاه، سيظهر الخطأ التالي:

ZeroDivisionError: division by zero

أنواع شائعة من الاستثناءات

  • ZeroDivisionError: يحدث عند محاولة القسمة على صفر.
  • TypeError: يحدث عند استخدام نوع بيانات غير صحيح.
  • ValueError: يحدث عند تمرير قيمة غير صالحة.
  • FileNotFoundError: يحدث عند محاولة فتح ملف غير موجود.
  • IndexError: يحدث عند محاولة الوصول إلى فهرس غير موجود في قائمة.
  • KeyError: يحدث عند محاولة الوصول إلى مفتاح غير موجود في قاموس.
 

2. كيفية التعامل مع الأخطاء باستخدام try و except

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

 

أ. الصياغة الأساسية

try:
# الكود الذي قد يسبب خطأ
x = 10 / 0
except ZeroDivisionError:
# الكود الذي سيتم تنفيذه إذا حدث الخطأ
print("لا يمكن القسمة على صفر!")

ملاحظة: إذا كنت تريد التعامل مع جميع أنواع الأخطاء دون تحديد نوع معين، يمكنك استخدام except فقط.

 

3. التعامل مع عدة استثناءات

يمكنك التعامل مع أكثر من نوع واحد من الأخطاء باستخدام عدة كتل except.

try:
num = int(input("أدخل رقمًا: "))
result = 10 / num
except ZeroDivisionError:
print("لا يمكن القسمة على صفر!")
except ValueError:
print("يجب إدخال رقم صالح!")
 

4. استخدام else و finally

أ. كتلة else

تُستخدم كتلة else لتنفيذ الكود إذا لم يحدث أي خطأ في كتلة try.

try:
num = int(input("أدخل رقمًا: "))
result = 10 / num
except ZeroDivisionError:
print("لا يمكن القسمة على صفر!")
except ValueError:
print("يجب إدخال رقم صالح!")
else:
print(f"النتيجة: {result}")
 

ب. كتلة finally

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

try:
file = open("example.txt", "r")
content = file.read()
except FileNotFoundError:
print("الملف غير موجود!")
finally:
file.close() # إغلاق الملف بغض النظر عما إذا حدث خطأ أم لا
 

5. رفع الاستثناءات يدويًا باستخدام raise

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

def check_age(age):
if age < 0:
raise ValueError("العمر لا يمكن أن يكون سالبًا!")
elif age < 18:
print("أنت قاصر.")
else:
print("أنت بالغ.")


try:
check_age(-5)
except ValueError as e:
print(e) # النتيجة: العمر لا يمكن أن يكون سالبًا!

6. تطبيقات عملية

تطبيق 1: التحقق من وجود ملف

import os


file_name = "example.txt"


try:
with open(file_name, "r") as file:
print(file.read())
except FileNotFoundError:
print(f"الملف {file_name} غير موجود!")

تطبيق 2: التحقق من إدخال المستخدم

try:
num = int(input("أدخل رقمًا: "))
print(f"الرقم الذي أدخلته هو: {num}")
except ValueError:
print("يجب إدخال رقم صالح!")

تطبيق 3: التعامل مع الأخطاء في القوائم

my_list = [1, 2, 3]


try:
print(my_list[5]) # فهرس غير موجود
except IndexError:
print("الفهرس غير موجود في القائمة!")

7. نصائح حول التعامل مع الأخطاء

  1. استخدام try و except بحذر:
    لا تستخدم try و except لتجنب كل الأخطاء. يجب أن تتعامل مع الأخطاء التي تتوقع حدوثها فقط.

  2. تحديد نوع الاستثناء:
    حاول دائمًا تحديد نوع الاستثناء بدقة بدلاً من استخدام except العام.

  3. استخدام finally لإغلاق الموارد:
    إذا كنت تعمل مع ملفات أو قواعد بيانات، استخدم finally لضمان إغلاق الموارد حتى إذا حدث خطأ.

  4. رفع الأخطاء المناسبة:
    استخدم raise لرفع أخطاء مخصصة عندما تكون هناك حاجة لذلك.

 

الخاتمة

في هذا الدرس، تعلمت كيفية التعامل مع الأخطاء أو الاستثناءات في بايثون باستخدام try, except, else, وfinally. هذه المهارات ضرورية جدًا لجعل برامجك أكثر مرونة واستقرارًا.

 

في الدرس القادم، سنتحدث عن التعامل مع الوحدات (Modules) وكيفية استخدامها لإعادة استخدام الكود وتنظيمه بشكل أفضل. استمر في الممارسة ولا تتردد في طرح الأسئلة إذا كنت بحاجة إلى مساعدة!

 

🚀 أنت الآن على الطريق الصحيح لتصبح مبرمجًا محترفًا!

التعليقات

  • Web development tutorial A-0

    تعلم برمجة المواقع الاكترونية A-0

    من الصفر إلى الاحتراف: رحلة تطوير الويب الكاملة

    عرض المقال
  • Differences Between Android and iOS

    الاختلافات بين Android وiOS

    برمجة التطبيقات المتنقلة: الاختلافات بين Android وiOS وأفضل الممارسات

    عرض المقال
  • Game Development with Unity

    تطوير الألعاب باستخدام Unity

    تطوير الألعاب باستخدام Unity: من الفكرة إلى المنتج النهائي

    عرض المقال
  • Mastering Programming with Python

    إتقان البرمجة باستخدام Python

    إتقان البرمجة باستخدام Python: المشاريع العملية والنصائح

    عرض المقال
  • What are the benefits of websites

    ما هي فوائد المواقع الاكترونية

    فوائد المواقع الإلكترونية للشركات

    عرض المقال
  • Web development tutorial A-1

    تعلم برمجة المواقع الاكترونية A-1

    الدرس الأول: تعلم لغة HTML من الصفر - مقدمة شاملة مع إعداد الأدوات

    عرض المقال
  • Web development tutorial A-2

    تعلم برمجة المواقع الاكترونية A-2

    الدرس الثاني: تعلم لغة HTML من الصفر - الوسوم المتقدمة والجداول

    عرض المقال
  • Artificial Intelligence Qwen AI

    الذكاء الاصطناعي Qwen AI

    Qwen AI هو نموذج ذكاء اصطناعي متعدد الوظائف يدعم اللغات ويتولى المهام الإبداعية والتفاعلية

    عرض المقال