Lietotāja definēti izņēmumi tiek izveidoti, definējot jaunu klasi, kas tiek mantota no Python iebūvētais izņēmums klasei vai kādai no tās apakšklasēm. To darot, mēs varam izveidot pielāgotus kļūdu ziņojumus un apstrādāt konkrētas kļūdas mūsu lietojumprogrammai atbilstošā veidā.
Darbības, lai izveidotu un izmantotu lietotāja definētus izņēmumus
Veiciet šīs darbības, lai programmā Python izveidotu un izmantotu lietotāja definētus izņēmumus:
- Definējiet jaunu izņēmuma klasi: Izveidojiet jaunu klasi, kas manto no Izņēmuma vai kādas tās apakšklases.
- Paaugstināt izņēmumu: Izmantojiet pacelšanas priekšrakstu, lai paaugstinātu lietotāja definētu izņēmumu, kad rodas konkrēts nosacījums.
- Rīkojieties ar izņēmumu: Lai apstrādātu lietotāja definētu izņēmumu, izmantojiet blokus try-except.
Piemērs: Šajā piemērā mēs izveidojam pielāgotu izņēmumu InvalidAgeError, lai nodrošinātu, ka vecuma vērtības ietilpst derīgā diapazonā (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)
Izvade
150 -> Age must be between 0 and 120
Paskaidrojums:
- Klase InvalidAgeError tiek mantota no izņēmuma. Tas definē an __karsts__ metode, kā pieņemt vecumu un vēstījumu.
- Metode __str__ atgriež nolasāmu kļūdas virknes attēlojumu.
- Ja vecums ir ārpus derīgā diapazona (0–120), tiek palielināts izņēmums.
- Izmēģināšanas bloks uztver izņēmumu un izdrukā kļūdas ziņojumu.
Izņēmuma klašu pielāgošana
Kad mēs izveidojam pielāgotu izņēmumu, mēs apakšklasē Python iebūvēto izņēmuma klasi (vai apakšklasi, piemēram, ValueError TypeError utt.). Pēc tam mēs varam pievienot savas atribūtu metodes vai pielāgotu loģiku, lai mūsu izņēmums būtu informatīvāks.
Mēs varam arī uzlabot pielāgotos izņēmumus, pievienojot papildu atribūtus vai ignorējošās metodes.
Piemērs: Šeit mēs uzlabojam InvalidAgeError, pievienojot kļūdas kodu un pielāgojot kļūdas ziņojumu.
Pythonclass 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)
Izvade
[Error Code 1001] 150 -> Age must be between 0 and 120
Paskaidrojums:
- InvalidAgeError tagad ir papildu atribūts error_code.
- __str__ metode tiek ignorēta, lai parādītu gan kļūdas kodu, gan vecumu.
- Kad tiek izpildīts set_age(150), izņēmums tiek palielināts un tiek noķerts try-except blokā.
- Pielāgotais kļūdas ziņojums tiek izdrukāts, padarot kļūdu aprakstošāku.
Standarta izņēmumu izmantošana kā pamatklase
Dažreiz tā vietā, lai tieši mantotu no izņēmuma, mēs varam izveidot pielāgotu izņēmumu, apakšklasē standarta izņēmumu, piemēram, RuntimeError ValueError utt. Tas ir noderīgi, ja jūsu pielāgotais izņēmums ir jāuzskata par noteikta veida kļūdu.
Piemērs: Šajā piemērā parādīts, kā izveidot pielāgotu izņēmumu NetworkError, mantojot no RuntimeError, kas ir standarta iebūvēts izņēmums.
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)
Izvade
('Connection failed') Paskaidrojums:
kas ir skaļrunis
- NetworkError manto no RuntimeError, kas ir iebūvēts izņēmuma veids.
- Paceļot ziņojumu, tas tiek saglabāts atribūtā args kā kortežs.
- Izņēmums tiek uztverts un tiek parādīti tā saglabātie argumenti.
Reāls piemērs: nederīga e-pasta kļūda
Šeit ir vienkāršs piemērs, kurā mēs izvirzām pielāgotu izņēmumu, ja e-pasta adrese nav derīga.
Pythonclass 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)
Izvade
userexample.com -> Invalid email format
Paskaidrojums:
- E-pasta adrešu apstiprināšanai ir definēta jauna izņēmuma klase InvalidEmailError.
- Ja dotajā e-pastā nav “@”, tiek noteikts izņēmums.
- Izmēģināšanas bloks uztver kļūdu un izdrukā formatēto ziņojumu.
Kad izmantot lietotāja definētus izņēmumus?
Lietotāja definēti izņēmumi ir jāņem vērā šādos gadījumos:
- Apzīmē noteiktas kļūdas lietojumprogrammā (piemēram, InvalidAgeError DatabaseConnectionError).
- Skaidrāku un aprakstošāku kļūdu ziņojumu nodrošināšana.
- Saistītu kļūdu grupas apstrāde atsevišķi, izmantojot izņemot.
Izmantojot lietotāja definētus izņēmumus, programmas kļūst vieglāk lasāmas, apkopjamas un vieglāk atkļūdojamas.