Како дефинисати прилагођене изузетке у Питхону? (Са примерима)

У овом упутству ћете научити како помоћу примера дефинисати прилагођене изузетке у зависности од ваших захтева.

Питхон има бројне уграђене изузетке који присиљавају ваш програм на грешку када нешто у програму пође по злу.

Међутим, понекад ће вам можда требати да направите сопствене прилагођене изузетке који служе вашој сврси.

Стварање прилагођених изузетака

У Питхону корисници могу да дефинишу прилагођене изузетке стварањем нове класе. Ова класа изузетка мора бити изведена, директно или индиректно, из уграђене 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 # 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 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.")

Ево примера покретања овог програма.

Унесите број: 12 Ова вредност је превелика, покушајте поново! Унесите број: 0 Ова вредност је премала, покушајте поново! Унесите број: 8 Ова вредност је премала, покушајте поново! Унесите број: 10 Честитамо! Добро сте погодили.

Дефинисали смо основну класу тзв Error.

Друга два изузетка ( ValueTooSmallErrorи ValueTooLargeError) која је заправо покренуо наш програм изведена су из ове класе. Ово је стандардни начин дефинисања кориснички дефинисаних изузетака у Питхон програмирању, али нисте ограничени само на овај начин.

Прилагођавање класа изузетака

Ову класу можемо даље прилагодити тако да прихвата друге аргументе према нашим потребама.

Да бисте сазнали више о прилагођавању класа Екцептион, морате да имате основно знање о објектно оријентисаном програмирању.

Посетите Питхон објектно оријентисано програмирање да бисте започели учење о објектно оријентисаном програмирању у Питхону.

Погледајмо један пример:

 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)

Оутпут

 Унесите износ зараде: 2000 Трацебацк (последњи последњи позив): Датотека "", ред 17, у повећању СалариНотИнРангеЕррор (плата) __маин __. СалариНотИнРангеЕррор: Плата није у опсегу (5000, 15000)

Овде смо надјачали конструктор Exceptionкласе да прихвати наше сопствене прилагођене аргументе salaryи message. Затим се конструктор родитељске Exceptionкласе позива ручно са 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)

Оутпут

 Унесите износ зараде: 2000 Трацебацк (последњи последњи позив): Датотека „/хоме/бсоиуј/Десктоп/Унтитлед-1.пи“, ред 20, у повишици СалариНотИнРангеЕррор (плата) __маин __. СалариНотИнРангеЕррор: 2000 -> Плата није у ( 5000, 15000) опсег

Да бисте сазнали више о томе како можете да радите са изузецима у Питхону, посетите Питхон Екцептион Хандлинг.

Занимљиви Чланци...