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

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

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

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، شما استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون (python user-defined exception) را می آموزید که چگونه استثناهای سفارشی را بسته به نیاز خود با کمک مثال تعریف کنید.

پیشنهاد ویژه : آموزش طراحی وب سایت با پایتون

پایتون استثناهای توکار زیادی دارد که برنامه شما را در صورتی که مشکلی در آن وجود داشته باشد، با خطا مواجه می کند.

با این حال، گاهی اوقات ممکن است لازم باشد استثناهای سفارشی خود را ایجاد کنید که در خدمت هدف شما باشد.

نحوه ایجاد استثناهای تعریف شده توسط کاربر

در پایتون، کاربران می توانند با ایجاد یک کلاس جدید استثناهای سفارشی را تعریف کنند. این کلاس استثنا باید به طور مستقیم یا غیرمستقیم از کلاس توکار 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 با یک پیام خطای اختیاری مطرح شود.

هنگامی که ما در حال توسعه یک برنامه پایتون هستیم، قرار دادن تمام موارد استثنا ایجاد شده شده توسط کاربر که برنامه ما آنها را مطرح می کند ، یک روش خوب است. بسیاری از ماژول های استاندارد این کار را انجام می دهند. آنها استثنائات خود را جداگانه به عنوان exception.py یا خطا.py تعریف می كنند.

کلاس exception تعریف شده توسط کاربر می تواند همه کارهایی را که یک کلاس عادی می تواند انجام دهد، پیاده سازی کند ، اما ما به طور کلی آنها را ساده و مختصر می کنیم. بیشتر پیاده سازی ها یک کلاس پایه سفارشی را اعلان می کنند و سایر کلاسها را از این کلاس پایه مستثنی می کنند. این مفهوم در مثال زیر واضح تر شده است.

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

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

این برنامه از کاربر می خواهد تا عددی را وارد کند تا زمانی که عدد ذخیره شده را به درستی حدس بزند. برای کمک به آنها برای پیدا کردن جواب درست، راهنمایی در مورد اینکه حدس آنها از عدد ذخیره شده بیشتر یا کمتر است، ارائه می شود.

# 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.")

 

در اینجا نمونه ای از این برنامه را مشاهده می کنید.

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، باید دانش اولیه ای در مورد برنامه نویسی شی گرا داشته باشید.

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)

 

خروجی

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__ را با نادیده گرفتن آن سفارشی کنیم.

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)

 

خروجی

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

 

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
  9. نام و دامنه در برنامه نویسی پایتون
  10. دستور شرطی if…else در برنامه نویسی پایتون
  11. حلقه for در برنامه نویسی پایتون
  12. حلقه while در برنامه نویسی پایتون
  13. دستورات break و continue در برنامه نویسی پایتون
  14. دستور pass در برنامه نویسی پایتون
  15. توابع در برنامه نویسی پایتون
  16. آرگومان تابع در برنامه نویسی پایتون
  17. تابع بازگشتی در برنامه نویسی پایتون
  18. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
  19. متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
  20. کلیدواژه global در برنامه نویسی پایتون
  21. ماژول های برنامه نویسی پایتون
  22. پکیج ها در برنامه نویسی پایتون
  23. اعداد و تبدیل نوع داده در برنامه نویسی پایتون 
  24. لیست در برنامه نویسی پایتون
  25. تاپل در برنامه نویسی پایتون 
  26. رشته ها در برنامه نویسی پایتون
  27. مجموعه ها در برنامه نویسی پایتون
  28. دیکشنری در برنامه نویسی پایتون
  29. عملیات ورودی/خروجی در برنامه نویسی پایتون 
  30. دایرکتوری و مدیریت فایل ها در برنامه نویسی پایتون
  31. خطاها و استثناهای توکار در برنامه نویسی پایتون
  32. مدیریت استثناها در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه