logo

Кориснички дефинисани изузеци у Питхон-у са примерима

Кориснички дефинисани изузеци се креирају дефинисањем нове класе која наслеђује од Питхон-ов уграђени изузетак класе или једне од њених поткласа. На тај начин можемо креирати прилагођене поруке о грешци и поступати са специфичним грешкама на начин који има смисла за нашу апликацију.

Кораци за креирање и коришћење кориснички дефинисаних изузетака

Пратите ове кораке да бисте креирали и користили кориснички дефинисане изузетке у Питхон-у:

  • Дефинишите нову класу изузетака: Креирајте нову класу која наслеђује Екцептион или било коју од његових подкласа.
  • Подигните изузетак: Користите наредбу подизања да бисте подигли кориснички дефинисани изузетак када се појави одређени услов.
  • Обрадите изузетак: Користите блокове три-екцепт за руковање кориснички дефинисаним изузетком.

Пример: У овом примеру креирамо прилагођени изузетак ИнвалидАгеЕррор да бисмо осигурали да вредности узраста спадају у важећи опсег (0–120).



Python
# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

Излаз
150 -> Age must be between 0 and 120 

Објашњење:

  • ИнвалидАгеЕррор класа наслеђује из Екцептиона. Он дефинише ан __вруће__ метод прихватања старости и поруке.
  • Метода __стр__ враћа читљив стринг приказ грешке.
  • У сет_аге() ако је старост изван важећег опсега (0–120) изузетак се подиже.
  • Блок три-екцепт хвата изузетак и штампа поруку о грешци.

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

Када креирамо прилагођени изузетак, ми подкласирамо Питхон-ову уграђену класу Екцептион (или подкласу као што је ВалуеЕррор ТипеЕррор итд.). Затим можемо додати сопствене методе атрибута или прилагођену логику како бисмо наш изузетак учинили информативнијим.

Такође можемо да побољшамо прилагођене изузетке додавањем додатних атрибута или замењивањем метода.

Пример: Овде побољшавамо грешку ИнвалидАгеЕррор додавањем кода грешке и прилагођавањем поруке о грешци.

Python
class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

Излаз
[Error Code 1001] 150 -> Age must be between 0 and 120 

Објашњење:

  • ИнвалидАгеЕррор сада има додатни атрибут еррор_цоде.
  • Метода __стр__ је замењена да би се приказали и код грешке и старост.
  • Када се изврши сет_аге(150), изузетак се подиже и хвата у блок три-екцепт.
  • Прилагођена порука о грешци се штампа, чинећи грешку описнијом.

Коришћење стандардних изузетака као основне класе

Понекад уместо директног наслеђивања из изузетка можемо да креирамо прилагођени изузетак тако што ћемо подкласирати стандардни изузетак као што је РунтимеЕррор ВалуеЕррор итд. Ово је корисно када ваш прилагођени изузетак треба третирати као специфичну врсту грешке.

Пример: Овај пример показује како да креирате прилагођени изузетак НетворкЕррор наслеђивањем од РунтимеЕррор који је стандардни уграђени изузетак.

Python
# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args) 

Излаз
('Connection failed') 

Објашњење:

сортирање спајањем јава
  • НетворкЕррор наслеђује РунтимеЕррор који је уграђени тип изузетка.
  • Када се подигне, порука се чува у атрибуту аргс као тупле.
  • Изузетак је ухваћен и његови сачувани аргументи се приказују.

Пример из стварног света: грешка неважеће е-поште

Ево једноставног примера где покрећемо прилагођени изузетак ако адреса е-поште није важећа:

Python
class InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e) 

Излаз
userexample.com -> Invalid email format 

Објашњење:

  • Нова класа изузетка ИнвалидЕмаилЕррор је дефинисана за валидацију адреса е-поште.
  • Ако дати имејл не садржи '@', подиже се изузетак.
  • Блок три-екцепт хвата грешку и штампа форматирану поруку.

Када користити кориснички дефинисане изузетке?

Кориснички дефинисане изузетке треба узети у обзир у следећим сценаријима:

  • Представљање одређених грешака у апликацији (нпр. ИнвалидАгеЕррор ДатабасеЦоннецтионЕррор).
  • Пружање јаснијих и описнијих порука о грешци.
  • Руковање групом повезаних грешака одвојено користећи осим.

Коришћењем кориснички дефинисаних изузетака програми постају читљивији за одржавање и лакши за отклањање грешака.