مفهوم معالجة الاخطاء في بايثون
معالجة الأخطاء في بايثون تعني التعامل مع أي استثناء (exception) قد يحدث خلال تنفيذ برنامج بايثون. و يمكن أن يحدث استثناء في حالة وجود خطأ في البرنامج أو عدم وجود مورد مطلوب أو أي حالة غير متوقعة أخرى.
عادةً ما يتم التعامل مع الأخطاء في بايثون باستخدام بيانات try/except. يتم وضع الشيفرة المحتملة للخطأ داخل كتلة try، وإذا حصل خطأ معين، تمتلئ المتغيرات التي يحملها الاستثناء بمعلومات الخطأ، على سبيل المثال رسالة الخطأ ونوع الخطأ. بعد ذلك، يتم التعامل مع هذا الخطأ داخل كتلة except، ويتم اتخاذ إجراء مناسب لمعالجة الخطأ.
و بالطبع يمكن استخدام أكثر من كتلة except للتعامل مع أنواع معينة من الأخطاء بشكل منفصل.
جملة try في بايثون
في Python يمكن استخدام الجملة try لتجريب تنفيذ كود والتعامل مع الاستثناءات التي قد تحدث أثناء تنفيذه. على سبيل المثال:
try:
# هنا يتم وضع الكود الذي نريد تجريب تنفيذه
except:
# هنا يتم وضع الكود الذي يتم تنفيذه في حال حدوث استثناء خلال تنفيذ الكود السابق
finally:
# هنا يتم وضع الكود الذي يتم تنفيذه دائمًا سواء حدث استثناء أو لا
يمكن استخدام كلمة except بدون تحديد نوع الاستثناء، أو يمكن تحديد نوع معين من الاستثناءات باستخدام الكلمة المفتاحية except مع اسم الاستثناء المطلوب، على سبيل المثال:
try:
# هنا يتم وضع الكود الذي نريد تجريب تنفيذه
except ValueError:
# هنا يتم وضع الكود الذي يتم تنفيذه في حال حدوث استثناء من نوع ValueError
finally:
# هنا يتم وضع الكود الذي يتم تنفيذه دائمًا سواء حدث استثناء أو لا
ويمكن أيضًا استخدام عدة كلمات except مع مزيد من التحديد في أنواع الاستثناءات، كما يمكن استخدام الجملة المفتاحية else لتنفيذ كود إضافي في حال عدم حدوث أي استثناءات.
جملة except في بايثون
في Python ، "except" هو كلمة مفتاحية تُستخدَم في تعبيرات استثناء الأخطاء (Exception Handling). يتم استخدامها في جملة try...except للتعامل مع الأخطاء والاستجابة لها. على سبيل المثال:
try:
# الكود الذي يحتمل حدوث خطأ فيه
result = 10 / 0
except ZeroDivisionError:
# التعامل مع الخطأ بشكل مناسب
print("حدث خطأ! لا يمكن القسمة على الصفر")
في هذا المثال ، يتم استخدام except مع ZeroDivisionError لالتقاط أي خطأ يحدث عند محاولة القسمة على الصفر ومن ثم يتم اتخاذ إجراء مناسب للتعامل مع الخطأ.
جملة finally في بايثون
finally في بايثون هي عبارة عن كلمة محجوزة تستخدم في جملة try-except-finally، وتُستخدم لتعريف كود يتم تنفيذه بغض النظر عما إذا حدث استثناء أم لا.
على سبيل المثال، إذا كان لديك كودًا يحاول فتح ملف وقراءته، فإن جملة finally يمكن استخدامها لإغلاق الملف بغض النظر عن ما إذا نجحت عملية القراءة أم لا:
try:
file = open("example.txt")
# قراءة الملف
except:
# معالجة الاستثناءات
finally:
file.close() # يتم إغلاق الملف في هذا السياق دائمًا
جملة else في بايثون
في بايثون، يمكن استخدام else في بلوك except لتحديد تعليمات إضافية تُنفَّذ في حال لم يُثير أي استثناء. وبهذا الشكل، فإن بلوك else سيتم تنفيذه إذا لم يتم القبض على أي استثناء في الكود.
يمكن استخدام else في مثل هذا السياق:
try:
# الكود الرئيسي
except SomeException:
# ادخال المهام اللازمة للتعامل مع الاستثناء
else:
# ادخال المهام التي يجب تنفيذها في حال عدم ظهور استثناء
إذا تم رفع أي استثناء داخل الكود الرئيسي، فسيتم تنفيذ بلوك except. أما إذا لم يتم رفع أي استثناء، فيتم تنفيذ بلوك else.
الاستثناءات الجاهزة في بايثون
في بايثون، يمكن استخدام الاستثناءات للتعامل مع الأخطاء والحالات الاستثنائية أثناء تنفيذ البرنامج. ويمكن للمبرمج إضافة استثناءاته الخاصة أو استخدام الاستثناءات الجاهزة المتوفرة في لغة بايثون. ومن بين الاستثناءات الجاهزة في بايثون:
- ValueError: استثناء يتم رفعه عند اكتشاف قيمة غير صالحة لنوع محدد.
- TypeError: استثناء يتم رفعه عند محاولة تنفيذ عملية لا تتوافق مع نوع البيانات.
- IndexError: استثناء يتم رفعه عند محاولة الوصول إلى عنصر في مؤشر خارج حدود النطاق الصحيح.
- KeyError: استثناء يتم رفعه عند محاولة الوصول إلى مفتاح غير موجود في القاموس.
- IOError: استثناء يتم رفعه عند حدوث خطأ في التعامل مع ملفات الإدخال / الإخراج.
- ImportError: استثناء يتم رفعه عند فشل محاولة استيراد وحدة / برنامج تعليمي.
- AttributeError: استثناء يتم رفعه عندما يتم الوصول إلى سمة أو طريقة غير موجودة في كائن.
- KeyboardInterrupt: استثناء يتم رفعه عندما يتم الضغط على مفتاح انقطاع البرنامج (CTRL + C) في نافذة الأوامر.
الكلمة المفتاحية raise في بايثون
raise في بايثون هي عبارة عن كلمة مفتاحية تستخدم لرفع استثناء (exception) يدويًا في الشفرة. يتم استخدام الكلمة raise عادةً في حالات وجود خطأ أو استثناء يجب التعامل معه بشكل يدوي، عوضًا عن السماح للبرنامج بإنهاء التنفيذ بشكل غير صحيح.
يمكن استخدام الكلمة raise في صياغة استثناءات من الأنواع المختلفة، على سبيل المثال:
raise ValueError("Invalid value")
يتم رفع استثناء من نوع ValueError وإرفاق رسالة "Invalid value" بالاستثناء.
raise TypeError("Invalid type")
يتم رفع استثناء من نوع TypeError وإرفاق رسالة "Invalid type" بالاستثناء.
raise Exception("Unknown error")
يتم رفع استثناء عام من نوع Exception وإرفاق رسالة "Unknown error" بالاستثناء.
مثال علئ جملة raise في بايثون
في بايثون، يستخدم raise لإطلاق (رمي) الاستثناءات (Exceptions). على سبيل المثال، إذا كان لديك دالة تحتوي على قيمة محددة يجب أن تكون أكبر من صفر، يمكنك استخدام raise لرمي استثناء ValueError عندما يتم إدخال قيمة غير صالحة.
هذا هو مثال بسيط يوضح كيفية استخدام raise في بايثون:
def calculate_square_root(num):
if num < 0:
raise ValueError("الرقم لا يمكن أن يكون أقل من الصفر")
else:
return math.sqrt(num)
print(calculate_square_root(16)) # النتيجة: 4.0
print(calculate_square_root(-16)) # يتم رفع ValueError exception
في هذا المثال، يتم استخدام raise لرفع استثناء ValueError إذا كان الرقم الممر إلى الدالة أقل من الصفر. إذا كان الرقم الممر إلى الدالة يساوي أو يزيد عن الصفر، فإن الدالة تعيد جذر التربيعي للرقم.