استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون
استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، شما استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون (python user-defined exception) را می آموزید که چگونه استثناهای سفارشی را بسته به نیاز خود با کمک مثال تعریف کنید.
پیشنهاد ویژه : آموزش طراحی وب سایت با پایتون
پایتون استثناهای توکار زیادی دارد که برنامه شما را در صورتی که مشکلی در آن وجود داشته باشد، با خطا مواجه می کند.
با این حال، گاهی اوقات ممکن است لازم باشد استثناهای سفارشی خود را ایجاد کنید که در خدمت هدف شما باشد.
نحوه ایجاد استثناهای تعریف شده توسط کاربر
در پایتون، کاربران می توانند با ایجاد یک کلاس جدید استثناهای سفارشی را تعریف کنند. این کلاس استثنا باید به طور مستقیم یا غیرمستقیم از کلاس توکار Exception گرفته شود. بیشتر استثناهای توکار نیز از این کلاس گرفته شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>> 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 با یک پیام خطای اختیاری مطرح شود.
هنگامی که ما در حال توسعه یک برنامه پایتون هستیم، قرار دادن تمام موارد استثنا ایجاد شده شده توسط کاربر که برنامه ما آنها را مطرح می کند ، یک روش خوب است. بسیاری از ماژول های استاندارد این کار را انجام می دهند. آنها استثنائات خود را جداگانه به عنوان exception.py یا خطا.py تعریف می كنند.
کلاس exception تعریف شده توسط کاربر می تواند همه کارهایی را که یک کلاس عادی می تواند انجام دهد، پیاده سازی کند ، اما ما به طور کلی آنها را ساده و مختصر می کنیم. بیشتر پیاده سازی ها یک کلاس پایه سفارشی را اعلان می کنند و سایر کلاسها را از این کلاس پایه مستثنی می کنند. این مفهوم در مثال زیر واضح تر شده است.
مثال: استثنای تعریف شده توسط کاربر در پایتون
در این مثال، ما نشان خواهیم داد که چگونه می توان از استثناهای تعریف شده توسط کاربر در یک برنامه برای گرفتن خطاها استفاده کرد.
این برنامه از کاربر می خواهد تا عددی را وارد کند تا زمانی که عدد ذخیره شده را به درستی حدس بزند. برای کمک به آنها برای پیدا کردن جواب درست، راهنمایی در مورد اینکه حدس آنها از عدد ذخیره شده بیشتر یا کمتر است، ارائه می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# 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 # you need to guess this number number = 10 # user guesses a number until he/she gets it right 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.") |
در اینجا نمونه ای از این برنامه را مشاهده می کنید.
1 2 3 4 5 6 7 8 9 10 11 |
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) که در واقع توسط برنامه ما مطرح می شوند از این کلاس مشتق شده اند. این روش استاندارد برای تعریف موارد استثنایی تعریف شده توسط کاربر در برنامه نویسی پایتون است، اما شما فقط به این روش محدود نمی شوید.
سفارشی کردن کلاس های استثنا
می توانیم این کلاس را برای پذیرفتن استدلال های دیگر بنا به نیاز خود بیشتر سفارشی کنیم.
برای یادگیری در مورد سفارشی سازی کلاس های exception، باید دانش اولیه ای در مورد برنامه نویسی شی گرا داشته باشید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary) |
خروجی
1 2 3 4 5 |
Enter salary amount: 2000 Traceback (most recent call last): File "<string>", line 17, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range |
در اینجا، ما سازنده کلاس Exception را نادیده گرفته ایم تا آرگومان های سفارشی salary و message خود را بپذیریم. سپس، سازنده کلاس استثنای والد به صورت دستی با آرگومان self.message با استفاده از ()super فراخوانی می شود.
صفت سفارشی self.salary برای استفاده بعداً تعریف شده است.
سپس از روش __str__ ارثی کلاس Exception برای نمایش پیام مربوطه در هنگام مطرح شدن SalaryNotInRangeError استفاده می شود.
ما همچنین می توانیم روش __str__ را با نادیده گرفتن آن سفارشی کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) def __str__(self): return f'{self.salary} -> {self.message}' salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary) |
خروجی
1 2 3 4 5 |
Enter salary amount: 2000 Traceback (most recent call last): File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range |
لیست جلسات قبل آموزش برنامه نویسی پایتون
- آموزش نصب و اجرای برنامه نویسی پایتون
- کلیدواژه ها و شناسه های برنامه نویسی پایتون
- دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
- متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون
- انواع داده ها در برنامه نویسی پایتون
- تبدیل نوع در برنامه نویسی پایتون
- ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
- عملگرها در برنامه نویسی پایتون
- نام و دامنه در برنامه نویسی پایتون
- دستور شرطی if…else در برنامه نویسی پایتون
- حلقه for در برنامه نویسی پایتون
- حلقه while در برنامه نویسی پایتون
- دستورات break و continue در برنامه نویسی پایتون
- دستور pass در برنامه نویسی پایتون
- توابع در برنامه نویسی پایتون
- آرگومان تابع در برنامه نویسی پایتون
- تابع بازگشتی در برنامه نویسی پایتون
- تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
- متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
- کلیدواژه global در برنامه نویسی پایتون
- ماژول های برنامه نویسی پایتون
- پکیج ها در برنامه نویسی پایتون
- اعداد و تبدیل نوع داده در برنامه نویسی پایتون
- لیست در برنامه نویسی پایتون
- تاپل در برنامه نویسی پایتون
- رشته ها در برنامه نویسی پایتون
- مجموعه ها در برنامه نویسی پایتون
- دیکشنری در برنامه نویسی پایتون
- عملیات ورودی/خروجی در برنامه نویسی پایتون
- دایرکتوری و مدیریت فایل ها در برنامه نویسی پایتون
- خطاها و استثناهای توکار در برنامه نویسی پایتون
- مدیریت استثناها در برنامه نویسی پایتون
دیدگاه شما