التعامل مع استثناءات البرمجة باستخدام دالة raise في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

التعامل مع استثناءات البرمجة باستخدام دالة raise في Python

في لغة البرمجة 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 على كتابة برامج قوية وقابلة للتصحيح، مما يجعل من السهل اكتشاف الأخطاء والتعامل معها بشكل فعال.

طور مهاراتك: مقالات يجب قراءتها في البرمجة