در این مطلب به استثناها در پایتون و در واقع استثناهای سفارشی پایتون که توسط کاربر تعریف می‌شوند پرداخته شده است.

استثناها در پایتون

در این مطلب، روش تعریف استثناها در پایتون بسته به نیازهای کاربر، بیان شده است. پایتون دارای استثناهای توکار متعددی است که برنامه را مجبور می‌کند هنگامی که اشتباهی اتفاق می‌افتد در خروجی پیغام خطا بدهد. اگرچه، گاهی ممکن است نیاز به ساخت استثناهای سفارشی باشد که هدف کاربر را تامین می‌کنند. در پایتون، کاربران می‌توانند این استثناها را با ساخت یک کلاس جدید تعریف کنند. این کلاس استثنا باید به طور مستقیم یا غیرمستقیم از کلاس Exception مشتق شود. بسیاری از استثناهای توکار نیز از این کلاس مشتق شده‌اند.

>>> class CustomError(Exception):
...     pass
...

>>> raise CustomError
Traceback (most recent call last):
...
__main__.CustomError

>>> raise CustomError("An error occurred")
Traceback (most recent call last):
...
__main__.CustomError: An error occurred

در اینجا، یک استثنای تعریف شده توسط کاربر که CustomError نامیده می‌شود ساخته شده است که از کلاس Exception مشتق می‌شود. این استثنای جدید می‌تواند مانند دیگر استثناها با استفاده از دستور raise با یک پیغام خطای انتخابی نمایش داده شود. هنگامی که کاربر در حال توسعه یک برنامه بزرگ است، بهتر است که همه استثناهای تعریف شده توسط کاربر که در برنامه نمایش داده شده است، در فایل‌های جداگانه‌ای قرار بگیرند. بسیاری از ماژول‌های استاندارد این کار را انجام می‌دهند. آن‌ها استثناهای خود را به صورت جداگانه به عنوان exceptions.py یا errors.py تعریف می‌کنند (به طور کلی، اما نه همیشه).

کلاس استثنای تعریف شده توسط کاربر، می‌تواند هر چیزی که یک کلاس نرمال می‌تواند انجام بدهد را پیاده‌سازی کند. بیشتر پیاده‌سازی‌ها، یک کلاس پایه مبنا تعریف می‌کنند و دیگر کلاس‌های استثنا را از این کلاس مبنا مشتق می‌کنند. اما، کاربر به طور کلی آن‌ها را ساده و دقیق می‌سازد. این مفهوم در مثال بیان شده در بخش بعدی از مطلب استثناها در پایتون شفاف شده است.

مثالی از استثناهای تعریف شده توسط کاربر در پایتون

در این مثال، چگونگی نمایش داده شدن استثناها در پایتون و ضبط خطاها در این زبان برنامه‌نویسی به وسیله استثناهای تعریف شده توسط کاربر نمایش داده شده است. این برنامه از کاربر درخواست ورود یک عدد را دارد، تا هنگامی که عدد ذخیره شده را به درستی حدس بزنند. برای کمک به کاربر جهت حدس زدن، راهنماهایی نیز فراهم شده است که به کاربر می‌گوید حدس آن‌ها از عدد ذخیره شده در حافظه بزرگ‌تر یا کوچک‌تر است.

# define Python user-defined exceptions
class Error(Exception):
   """Base class for other exceptions"""
   pass

class ValueTooSmallError(Error):
   """Raised when the input value is too small"""
   pass

class ValueTooLargeError(Error):
   """Raised when the input value is too large"""
   pass

# our main program
# user guesses a number until he/she gets it right

# you need to guess this number
number = 10

while True:
   try:
       i_num = int(input("Enter a number: "))
       if i_num < number:
           raise ValueTooSmallError
       elif i_num > number:
           raise ValueTooLargeError
       break
   except ValueTooSmallError:
       print("This value is too small, try again!")
       print()
   except ValueTooLargeError:
       print("This value is too large, try again!")
       print()

print("Congratulations! You guessed it correctly.")

خروجی حاصل از اجرای این برنامه به صورت زیر است.

Enter a number: 12
This value is too large, try again!

Enter a number: 0
This value is too small, try again!

Enter a number: 8
This value is too small, try again!

Enter a number: 10
Congratulations! You guessed it correctly.

در اینجا، یک کلاس پایه که Error نام دارد، تعریف شده است. دو استثنای دیگر، (ValueTooSmallError و ValueTooLargeError) که توسط برنامه نمایش داده شدند، از این کلاس مشتق شده‌اند. این یک راهکار استاندارد برای تعریف استثناهای تعریف شده توسط کاربر در زبان برنامه نویسی پایتون محسوب می‌شود، اما تنها راه موجود برای این کار نیست.

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

بر اساس رای ۵ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.