8.6. الاستثناءات المُعرّفة من قِبل المستخدم #
يمكن للبرامج تسمية استثناءاتها الخاصة عن طريق إنشاء فئة استثناء جديدة (انظر الفئات لمزيد من المعلومات حول فئات بايثون). عادةً ما تُشتق الاستثناءات من فئة الاستثناء، سواءً بشكل مباشر أو غير مباشر.
يمكن تعريف فئات الاستثناءات التي تقوم بأي شيء تقوم به أي فئة أخرى، ولكن عادةً ما تكون بسيطة، وغالبًا ما تقدم عددًا من السمات فقط التي تسمح باستخراج معلومات حول الخطأ بواسطة معالجات الاستثناء. عند إنشاء وحدة نمطية قد تُسبب عدة أخطاء مختلفة، من الممارسات الشائعة إنشاء فئة أساسية للاستثناءات المُعرّفة بواسطة تلك الوحدة، وفئة فرعية لإنشاء فئات استثناءات مُحددة لحالات خطأ مُختلفة:
class Error(Exception):
"""Base class for exceptions in this module."""
pass
class InputError(Error):
"""Exception raised for errors in the input.
Attributes:
expression -- input expression in which the error occurred
message -- explanation of the error
"""
def __init__(self, expression, message):
self.expression = expression
self.message = message
class TransitionError(Error):
"""Raised when an operation attempts a state transition that's not
allowed.
Attributes:
previous -- state at beginning of transition
next -- attempted new state
message -- explanation of why the specific transition is not allowed
"""
def __init__(self, previous, next, message):
self.previous = previous
self.next = next
self.message = message
تُعرّف معظم الاستثناءات بأسماء تنتهي بـ “Error”، على غرار تسمية الاستثناءات القياسية.
تُعرّف العديد من الوحدات النمطية القياسية استثناءاتها الخاصة للإبلاغ عن الأخطاء التي قد تحدث في الدوال التي تُعرّفها. للمزيد من المعلومات حول الفئات، يُرجى الاطلاع على فصل الفئات.