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

الدرس السابع: التعامل مع الأخطاء (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. نصائح حول التعامل مع الأخطاء
-
استخدام
try
وexcept
بحذر:
لا تستخدمtry
وexcept
لتجنب كل الأخطاء. يجب أن تتعامل مع الأخطاء التي تتوقع حدوثها فقط. -
تحديد نوع الاستثناء:
حاول دائمًا تحديد نوع الاستثناء بدقة بدلاً من استخدامexcept
العام. -
استخدام
finally
لإغلاق الموارد:
إذا كنت تعمل مع ملفات أو قواعد بيانات، استخدمfinally
لضمان إغلاق الموارد حتى إذا حدث خطأ. -
رفع الأخطاء المناسبة:
استخدمraise
لرفع أخطاء مخصصة عندما تكون هناك حاجة لذلك.
الخاتمة
في هذا الدرس، تعلمت كيفية التعامل مع الأخطاء أو الاستثناءات في بايثون باستخدام try
, except
, else
, وfinally
. هذه المهارات ضرورية جدًا لجعل برامجك أكثر مرونة واستقرارًا.
في الدرس القادم، سنتحدث عن التعامل مع الوحدات (Modules) وكيفية استخدامها لإعادة استخدام الكود وتنظيمه بشكل أفضل. استمر في الممارسة ولا تتردد في طرح الأسئلة إذا كنت بحاجة إلى مساعدة!
🚀 أنت الآن على الطريق الصحيح لتصبح مبرمجًا محترفًا!
التعليقات

لا يوجد اي تعليقات
يرجى تسجيل الدخول لترك تعليق