التعامل مع استثناءات البرمجة باستخدام دالة raise في Python
تمت الكتابة بواسطة: عبد الحكيم
تارخ آخر تحديث: 19 ديسمبر 2024محتوى المقال
- ما هي دالة raise؟
- استخدام raise لرفع استثناءات مدمجة
- رفع استثناءات مخصصة باستخدام raise
- إعادة رفع الاستثناءات
- تمرير رسائل خطأ مخصصة مع raise
- التعامل مع استثناءات متعددة
- الخلاصة
في لغة البرمجة Python، تعتبر الاستثناءات (Exceptions) جزءًا مهمًا من عملية معالجة الأخطاء. عندما يحدث خطأ في البرنامج، يمكن لـ Python أن تثير (ترفع) استثناءً للإشارة إلى المشكلة، مثل محاولة تقسيم عدد على الصفر أو الوصول إلى عنصر في قائمة غير موجودة. تُعد دالة raise
وسيلة قوية ومفيدة لرفع استثناءات مخصصة في Python.
في هذا المقال، سنتناول كيفية استخدام دالة raise
لرفع استثناءات مخصصة، ونتعلم كيفية التعامل مع هذه الاستثناءات بشكل فعال في برامجنا.
ما هي دالة raise
؟
تُستخدم دالة raise
في Python لرفع (إثارة) استثناءات مخصصة. عندما تكتشف حالة غير متوقعة أو خطأ في جزء معين من الشيفرة البرمجية، يمكنك استخدام raise
لإيقاف تنفيذ البرنامج وإعلام المبرمج أو المستخدم بحدوث المشكلة.
ببساطة، يمكن القول إن raise
تقوم بإطلاق إشارة تفيد بوجود خطأ معين، وتقوم بتمرير رسالة خطأ يمكن استخدامها لاحقًا لمعالجة هذا الخطأ أو عرضه للمستخدم.
استخدام raise
لرفع استثناءات مدمجة
يمكنك استخدام raise
لرفع استثناءات مدمجة في Python مثل ValueError
أو TypeError
. على سبيل المثال، لنقم برفع استثناء ValueError
عندما يُدخل المستخدم قيمة غير صحيحة:
def check_age(age):
if age < 0:
raise ValueError("العمر لا يمكن أن يكون سالباً")
try:
check_age(-5)
except ValueError as e:
print(e) # الناتج: العمر لا يمكن أن يكون سالباً
في هذا المثال، إذا تم إدخال قيمة سالبة للعمر، سيتم رفع استثناء ValueError
مع رسالة خطأ توضيحية. ثم يتم التعامل مع الاستثناء باستخدام كتلة try
وexcept
.
رفع استثناءات مخصصة باستخدام raise
إلى جانب الاستثناءات المدمجة، يمكنك أيضًا إنشاء استثناءات مخصصة. لإنشاء استثناء مخصص، تحتاج إلى إنشاء فئة جديدة ترث من الفئة Exception
أو إحدى فئات الاستثناءات المدمجة. بعد ذلك، يمكنك استخدام raise
لرفع هذا الاستثناء عند الحاجة.
مثال: إنشاء استثناء مخصص
class InvalidInputError(Exception):
pass
def check_value(value):
if value > 100:
raise InvalidInputError("القيمة أكبر من 100")
try:
check_value(150)
except InvalidInputError as e:
print(e) # الناتج: القيمة أكبر من 100
في هذا المثال، قمنا بإنشاء استثناء مخصص يُدعى InvalidInputError
والذي يتم رفعه عندما تكون القيمة أكبر من 100. يتم التعامل مع هذا الاستثناء لاحقًا في كتلة try
وexcept
.
إعادة رفع الاستثناءات
في بعض الأحيان، قد تحتاج إلى التقاط استثناء معين ومعالجته، ولكنك تريد إعادة رفعه بعد ذلك لمواصلة المعالجة في مكان آخر. يمكنك القيام بذلك باستخدام raise
داخل كتلة except
.
مثال: إعادة رفع الاستثناء
def divide(a, b):
try:
return a / b
except ZeroDivisionError:
print("لا يمكن القسمة على الصفر")
raise
try:
divide(10, 0)
except ZeroDivisionError as e:
print(e) # الناتج: division by zero
في هذا المثال، نقوم بمحاولة قسمة عدد على صفر. عندما يحدث استثناء ZeroDivisionError
، نقوم بعرض رسالة، ثم نعيد رفع الاستثناء لمعالجته لاحقًا.
تمرير رسائل خطأ مخصصة مع raise
يمكنك تمرير رسائل مخصصة عند رفع استثناء باستخدام raise
. تسمح هذه الرسائل بتقديم معلومات إضافية حول الخطأ الذي حدث، مما يساعد في تصحيح المشكلة بشكل أسرع.
مثال: رفع استثناء برسالة مخصصة
def check_password(password):
if len(password) < 8:
raise ValueError("كلمة المرور يجب أن تكون أطول من 8 أحرف")
try:
check_password("12345")
except ValueError as e:
print(e) # الناتج: كلمة المرور يجب أن تكون أطول من 8 أحرف
في هذا المثال، إذا كانت كلمة المرور أقصر من 8 أحرف، سيتم رفع استثناء ValueError
مع رسالة توضيحية مخصصة.
التعامل مع استثناءات متعددة
في بعض الأحيان، قد تواجه مواقف تحتاج فيها إلى التعامل مع أنواع متعددة من الاستثناءات. يمكنك استخدام عدة كتل except
لمعالجة كل استثناء بطريقة مختلفة.
مثال: التعامل مع استثناءات متعددة
def handle_exceptions(value):
try:
if value == 'zero':
raise ZeroDivisionError("القسمة على الصفر!")
elif value == 'value':
raise ValueError("قيمة غير صحيحة!")
except ZeroDivisionError as ze:
print(ze)
except ValueError as ve:
print(ve)
handle_exceptions('zero') # الناتج: القسمة على الصفر!
handle_exceptions('value') # الناتج: قيمة غير صحيحة!
في هذا المثال، يتم رفع استثناء ZeroDivisionError
أو ValueError
بناءً على قيمة الإدخال، ويتم التعامل مع كل استثناء بشكل منفصل في كتلة except
.
الخلاصة
تُعد دالة raise
في Python أداة قوية لرفع الاستثناءات ومعالجة الأخطاء. يمكنك من خلالها رفع استثناءات مدمجة أو مخصصة، وتمرير رسائل خطأ توضيحية، وحتى إعادة رفع الاستثناءات لمزيد من المعالجة. يساعدك استخدام raise
على كتابة برامج قوية وقابلة للتصحيح، مما يجعل من السهل اكتشاف الأخطاء والتعامل معها بشكل فعال.
طور مهاراتك: مقالات يجب قراءتها في البرمجة
- كيفية استخدام دالة eval() لتنفيذ النصوص البرمجية في Python
- فهم دالة exec() لتنفيذ التعليمات البرمجية النصية في Python
- استخدام دالة hasattr() للتحقق من وجود خصائص للكائنات في Python
- كيفية استخدام دالة getattr() للوصول إلى خصائص الكائنات في Python
- تعيين خصائص الكائنات باستخدام دالة setattr() في Python
- حذف خصائص الكائنات باستخدام دالة delattr() في Python
- فهم دالة globals() للتعامل مع المتغيرات العامة في Python
- التعامل مع القوائم المتشعبة باستخدام دالة deepcopy() في Python
- تحويل النصوص إلى JSON باستخدام دالة json.dumps() في Python
- تحليل البيانات بصيغة JSON باستخدام دالة json.loads() في Python