استثناها در پایتون — به زبان ساده
در این مطلب به استثناها در پایتون و در واقع استثناهای سفارشی پایتون که توسط کاربر تعریف میشوند پرداخته شده است.
استثناها در پایتون
در این مطلب، روش تعریف استثناها در پایتون بسته به نیازهای کاربر، بیان شده است. پایتون دارای استثناهای توکار متعددی است که برنامه را مجبور میکند هنگامی که اشتباهی اتفاق میافتد در خروجی پیغام خطا بدهد. اگرچه، گاهی ممکن است نیاز به ساخت استثناهای سفارشی باشد که هدف کاربر را تامین میکنند.
در پایتون، کاربران میتوانند این استثناها را با ساخت یک کلاس جدید تعریف کنند. این کلاس استثنا باید به طور مستقیم یا غیرمستقیم از کلاس Exception مشتق شود. بسیاری از استثناهای توکار نیز از این کلاس مشتق شدهاند.
1>>> class CustomError(Exception):
2... pass
3...
4
5>>> raise CustomError
6Traceback (most recent call last):
7...
8__main__.CustomError
9
10>>> raise CustomError("An error occurred")
11Traceback (most recent call last):
12...
13__main__.CustomError: An error occurred
در اینجا، یک استثنای تعریف شده توسط کاربر که CustomError نامیده میشود ساخته شده است که از کلاس Exception مشتق میشود. این استثنای جدید میتواند مانند دیگر استثناها با استفاده از دستور raise با یک پیغام خطای انتخابی نمایش داده شود. هنگامی که کاربر در حال توسعه یک برنامه بزرگ است، بهتر است که همه استثناهای تعریف شده توسط کاربر که در برنامه نمایش داده شده است، در فایلهای جداگانهای قرار بگیرند. بسیاری از ماژولهای استاندارد این کار را انجام میدهند. آنها استثناهای خود را به صورت جداگانه به عنوان exceptions.py یا errors.py تعریف میکنند (به طور کلی، اما نه همیشه).
کلاس استثنای تعریف شده توسط کاربر، میتواند هر چیزی که یک کلاس نرمال میتواند انجام بدهد را پیادهسازی کند. بیشتر پیادهسازیها، یک کلاس پایه مبنا تعریف میکنند و دیگر کلاسهای استثنا را از این کلاس مبنا مشتق میکنند. اما، کاربر به طور کلی آنها را ساده و دقیق میسازد. این مفهوم در مثال بیان شده در بخش بعدی از مطلب استثناها در پایتون شفاف شده است.
مثالی از استثناهای تعریف شده توسط کاربر در پایتون
در این مثال، چگونگی نمایش داده شدن استثناها در پایتون و ضبط خطاها در این زبان برنامهنویسی به وسیله استثناهای تعریف شده توسط کاربر نمایش داده شده است. این برنامه از کاربر درخواست ورود یک عدد را دارد، تا هنگامی که عدد ذخیره شده را به درستی حدس بزنند.
برای کمک به کاربر جهت حدس زدن، راهنماهایی نیز فراهم شده است که به کاربر میگوید حدس آنها از عدد ذخیره شده در حافظه بزرگتر یا کوچکتر است.
1# define Python user-defined exceptions
2class Error(Exception):
3 """Base class for other exceptions"""
4 pass
5
6class ValueTooSmallError(Error):
7 """Raised when the input value is too small"""
8 pass
9
10class ValueTooLargeError(Error):
11 """Raised when the input value is too large"""
12 pass
13
14# our main program
15# user guesses a number until he/she gets it right
16
17# you need to guess this number
18number = 10
19
20while True:
21 try:
22 i_num = int(input("Enter a number: "))
23 if i_num < number:
24 raise ValueTooSmallError
25 elif i_num > number:
26 raise ValueTooLargeError
27 break
28 except ValueTooSmallError:
29 print("This value is too small, try again!")
30 print()
31 except ValueTooLargeError:
32 print("This value is too large, try again!")
33 print()
34
35print("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) که توسط برنامه نمایش داده شدند، از این کلاس مشتق شدهاند.
این یک راهکار استاندارد برای تعریف استثناهای تعریف شده توسط کاربر در زبان برنامه نویسی پایتون محسوب میشود، اما تنها راه موجود برای این کار نیست.