logo

Uporabniško določene izjeme v Pythonu s primeri

Uporabniško določene izjeme se ustvarijo z definiranjem novega razreda, ki deduje Pythonova vgrajena izjema razreda ali enega od njegovih podrazredov. S tem lahko ustvarimo sporočila o napakah po meri in določene napake obravnavamo na način, ki je smiseln za našo aplikacijo.

Koraki za ustvarjanje in uporabo uporabniško določenih izjem

Za ustvarjanje in uporabo uporabniško določenih izjem v Pythonu sledite tem korakom:



  • Določite nov razred izjem: Ustvarite nov razred, ki deduje Exception ali katerega koli od njegovih podrazredov.
  • Dvignite izjemo: Uporabite stavek dviga, da dvignete uporabniško definirano izjemo, ko nastopi določen pogoj.
  • Obravnava izjeme: Za obravnavo uporabniško določene izjeme uporabite bloke poskusi razen.

primer: V tem primeru ustvarimo izjemo po meri InvalidAgeError, da zagotovimo, da so vrednosti starosti znotraj veljavnega obsega (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) 

Izhod
150 -> Age must be between 0 and 120 

Pojasnilo:

  • Razred InvalidAgeError podeduje razred Exception. Določa an __vroče__ način sprejemanja starosti in sporočila.
  • Metoda __str__ vrne berljivo predstavitev niza napake.
  • V set_age(), če je starost zunaj veljavnega obsega (0–120), se sproži izjema.
  • Blok poskusi razen ujame izjemo in natisne sporočilo o napaki.

Prilagajanje izjemnih razredov

Ko ustvarimo izjemo po meri, Pythonov vgrajeni razred Exception uvrstimo v podrazred (ali podrazred, kot je ValueError TypeError itd.). Nato lahko dodamo lastne metode atributov ali logiko po meri, da bo naša izjema bolj informativna.



Izjeme po meri lahko izboljšamo tudi z dodajanjem dodatnih atributov ali preglasitvenih metod.

branje datoteke csv v javi

primer: Tukaj izboljšamo InvalidAgeError tako, da dodamo kodo napake in prilagodimo sporočilo o napaki.

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) 

Izhod
[Error Code 1001] 150 -> Age must be between 0 and 120 

Pojasnilo:



  • InvalidAgeError ima zdaj dodaten atribut error_code.
  • Metoda __str__ je preglasena za prikaz kode napake in starosti.
  • Ko se izvede set_age(150), se izjema sproži in ujame v bloku poskusi razen.
  • Prilagojeno sporočilo o napaki se natisne, tako da je napaka bolj opisna.

Uporaba standardnih izjem kot osnovnega razreda

Včasih lahko namesto neposrednega dedovanja iz Izjeme ustvarimo izjemo po meri tako, da podrazredimo standardno izjemo, kot je RuntimeError ValueError itd. To je uporabno, ko je treba vašo izjemo po meri obravnavati kot posebno vrsto napake.

primer: Ta primer prikazuje, kako ustvariti izjemo po meri NetworkError z dedovanjem od RuntimeError, ki je standardna vgrajena izjema.

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) 

Izhod
('Connection failed') 

Pojasnilo:

  • NetworkError podeduje RuntimeError, ki je vgrajena vrsta izjeme.
  • Ko je sporočilo dvignjeno, je shranjeno v atributu args kot torka.
  • Izjema je ujeta in njeni shranjeni argumenti so prikazani.

Primer iz resničnega sveta: napaka neveljavne e-pošte

Tukaj je preprost primer, kjer sprožimo izjemo po meri, če e-poštni naslov ni veljaven:

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) 

Izhod
userexample.com -> Invalid email format 

Pojasnilo:

  • Za preverjanje e-poštnih naslovov je definiran nov razred izjeme InvalidEmailError.
  • Če dani e-poštni naslov ne vsebuje znaka "@", se sproži izjema.
  • Blok poskusi razen zazna napako in natisne oblikovano sporočilo.

Kdaj uporabiti uporabniško določene izjeme?

Uporabniško določene izjeme je treba upoštevati v naslednjih scenarijih:

  • Predstavljanje določenih napak v aplikaciji (npr. InvalidAgeError DatabaseConnectionError).
  • Zagotavljanje jasnejših in bolj opisnih sporočil o napakah.
  • Ločeno obravnavanje skupine povezanih napak z uporabo razen.

Z uporabo uporabniško določenih izjem postanejo programi bolj berljivi, vzdržljivi in ​​lažji za odpravljanje napak.