الاستثناءات المعرفة من طرف المستخدم

من موسوعة حسوب

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

يمكن تعريف أصناف الاستثناءات لتؤدي نفس العمل الذي يؤدّيه أيّ صنف آخر، ولكنّها تكون في العادة بسيطة، وتقدّم في أغلب الأحيان عددًا من الخاصيات التي تسمح لمعالجات الاستثناءات باستخراج المعلومات الخاصة بالخطأ.

عند إنشاء وحدة لها القدرة على إطلاق استثناءات مختلفة، فمن الشائع إنشاء صنف أساس للاستثناءات يُعرّف بواسطة تلك الوحدة، وأصناف فرعية تعمل على إنشاء أصناف استثناءات للأنواع المختلفة من الأخطاء:

class Error(Exception):
    """الصنف الأساسي للاستثناءات في هذه الوحدة"""
    pass

class InputError(Error):
    """يطلق الاستثناء عند وجود أخطاء في المدخلات.

    الخاصيات:
        expression -- التعبير الذي حصل فيه الاستثناء
        message -- تفسير الخطأ
    """

    def __init__(self, expression, message):
        self.expression = expression
        self.message = message

class TransitionError(Error):
    """يطلق هذا الخطأ عندما تحاول عملية إجراء تحويلات غير مسموح بها

    Attributes:
        previous -- الحالة قبل عملية التحويل
        next -- الحالة الجديدة
        message -- شرح سبب عدم إمكانية إجراء التحويل
    """

    def __init__(self, previous, next, message):
        self.previous = previous
        self.next = next
        self.message = message

تعرّف معظم الاستثناءات بأسماء تنتهي بكلمة "Error" وتشبه فيه ذلك طريقة تسمية الاستثناءات المضمنة داخليًا في بايثون.

تعرف معظم الوحدات القياسية استثناءاتها الخاصّة بها للتبليغ عن الأخطاء التي قد تنشأ من الدوال الخاصّة بتلك الوحدة. ويمكن الحصول على المزيد من المعلومات حول الأصناف في قسم الأصناف في بايثون.

انظر أيضًا

مصادر