Výnimky sú výkonným a elegantným spôsobom riešenia chýb vo vašich programoch Python. Vlastné výnimky posúvajú túto silu na novú úroveň.

Vstavané triedy výnimiek Pythonu neriešia určité chybové situácie, ktoré môžu vo vašom kóde nastať. V takýchto prípadoch budete musieť vytvoriť vlastné výnimky, aby ste tieto chyby efektívne zvládli.

V Pythone môžete definovať vlastné výnimky a vyvolať ich, keď nastanú špecifické chybové situácie. Pomocou vlastných výnimiek môžete spravovať špecifické informatívne chyby, čím sa zlepší čitateľnosť a udržiavateľnosť kódu.

Prečo potrebujete vlastné výnimky?

Počas vývoja aplikácie môžu vzniknúť rôzne chybové scenáre v dôsledku zmien v kóde, integrácie s inými balíkmi alebo knižnicami a interakcií s externými aplikáciami. Je dôležité zvládnuť tieto chyby, aby ste sa z nich zotavili alebo aby ste poruchu zvládli elegantne.

Python ponúka celý rad vstavaná výnimka triedy, ktoré pokrývajú chyby ako napr ValueError, TypeError, FileNotFoundError, a viac. Aj keď tieto vstavané výnimky slúžia svojmu účelu dobre, môžu len niekedy presne reprezentovať chyby, ktoré sa môžu vyskytnúť vo vašej aplikácii.

instagram viewer

Vytvorením vlastných výnimiek ich môžete prispôsobiť tak, aby vyhovovali požiadavkám vašej aplikácie a poskytnúť informácie vývojárom, ktorí používajú váš kód.

Ako definovať vlastné výnimky

Ak chcete vytvoriť vlastné výnimky, definujte triedu Pythonu ktorý dedí z Trieda výnimiek. The Výnimka trieda ponúka základné funkcie, ktoré budete potrebovať na spracovanie výnimiek, a môžete si ju prispôsobiť tak, aby pridávala funkcie na základe vašich špecifických potrieb.

Pri vytváraní vlastných tried výnimiek ich majte jednoduché a zároveň zahrňte potrebné atribúty na ukladanie informácií o chybách. Obslužné programy výnimiek potom môžu pristupovať k týmto atribútom, aby mohli správne spracovávať chyby.

Tu je vlastná trieda výnimiek, MyCustomError:

classMyCustomError(Exception):
def__init__(self, message=None):
self.message = message
super().__init__(message)

Táto trieda akceptuje voliteľný argument správy počas inicializácie. Používa sa Super() metóda na volanie konštruktora bázy Výnimka triedy, ktorá je nevyhnutná na spracovanie výnimiek.

Ako zvýšiť vlastné výnimky

Ak chcete upozorniť na chybu, použite zvýšiť kľúčové slovo, za ktorým nasleduje inštancia vašej vlastnej triedy výnimiek, pričom mu ako argument odošlete chybovú správu:

ifTrue:
raise MyCustomError("A Custom Error Was Raised...")

Chybu môžete vyvolať aj bez zadania akýchkoľvek argumentov:

ifTrue:
raise MyCustomError # shorthand

Každý z týchto formátov je vhodný na vytváranie vlastných chýb.

Ako zaobchádzať s vlastnými výnimkami

Spracovanie vlastných výnimiek sa riadi rovnakým prístupom ako spracovanie vstavaných výnimiek. Použite skúste, okrem, a konečne blokov na zachytenie vlastných výnimiek a vykonanie príslušných opatrení.

try:
print("Hello, You're learning how to MakeUseOf Custom Errors")
raise MyCustomError("Opps, Something Went Wrong...")
except MyCustomError as err:
print(f"Error: {err}")
finally:
print("Done Handling Custom Error")

Týmto spôsobom môžete spracovať všetky formy vyvolaných vlastných výnimiek.

Ak dôjde k výnimke počas vykonávania a skúste blok, zodpovedajúci okrem blok dokáže zachytiť a zvládnuť ho. Ak nie je vhodné okrem blok na spracovanie výnimky, ľubovoľná konečne blok sa vykoná, po ktorom nasleduje opätovné zvýšenie výnimky. Použite a konečne blokovať predovšetkým na vykonávanie čistiacich úloh, ktoré sa musia spustiť za každých okolností, či už dôjde k výnimke alebo nie.

try:
raise KeyboardInterrupt
except MyCustomError as err:
print(f"Error: {err}")
finally:
print("Did not Handle the KeyboardInterrupt Error. \
Can Only Handle MyCustomError")

V tejto vzorke a Prerušenie klávesnice nastane výnimka, ale okrem blokovať iba rukoväte MyCustomError výnimky. V tomto prípade, konečne blok sa spustí a potom sa neošetrená výnimka znova vyvolá.

Dedenie vlastných tried chýb

Založený na koncepcia objektovo orientovaného programovania (OOP), môžete tiež dediť z vlastných tried výnimiek, rovnako ako bežné triedy. Zdedením z vlastnej triedy výnimiek môžete vytvoriť triedy chýb, ktoré poskytujú výnimke konkrétnejší kontext. Tento prístup vám umožňuje spracovať chyby na rôznych úrovniach vo vašom kóde a poskytuje lepšie pochopenie toho, čo chybu spôsobilo.

Povedzme, že vyvíjate webovú aplikáciu, ktorá spolupracuje s externým API. Toto API môže mať rôzne chybové scenáre. Tieto chyby budete chcieť riešiť konzistentne a jasne v celom kóde. Aby ste to dosiahli, vytvorte vlastnú triedu výnimiek, BaseAPIEException:

classBaseAPIException(Exception):
Base class for API-related exceptions.
def__init__(self, message):
super().__init__(message)
self.message = message

Keď budete mať túto základnú vlastnú triedu výnimiek, môžete vytvoriť podradené triedy výnimiek, ktoré z nej zdedia:

classAPINotFoundError(BaseAPIException):
Raised when the requested resource is not found in the API.
pass

classAPIAuthenticationError(BaseAPIException):
Raised when there's an issue with authentication to the API.
pass

classAPIRateLimitExceeded(BaseAPIException):
Raised when the rate limit for API requests is exceeded.
pass

Zvýšte a zachyťte tieto vlastné výnimky pri volaniach rozhrania API v rámci vašej webovej aplikácie. Zaobchádzajte s nimi zodpovedajúcim spôsobom pomocou vhodnej logiky vo vašom kóde.

defrequest_api():
try:
# Simulate an API error for demonstration purposes
raise APINotFoundError("Requested resource not found.")
except APINotFoundError as err:
# Log or handle the 'Not Found' error case
print(f"API Not Found Error: {err}")
except APIAuthenticationError:
# Take appropriate actions for authentication error
print(f"API Authentication Error: {err}")
except APIRateLimitExceeded:
# Handle the rate limit exceeded scenario
print(f"API Rate Limit Exceeded: {err}")
except BaseAPIException:
# Handle other unknown API exceptions
print(f"Unknown API Exception: {err}")

Finálna klauzula okrem kontroluje nadradenú triedu a funguje ako záchytný bod pre všetky ostatné chyby súvisiace s API.

Keď zdedíte vlastné triedy výnimiek, môžete efektívne spracovávať chyby v rámci API. Tento prístup vám umožňuje oddeliť spracovanie chýb od podrobností o implementácii rozhrania API, uľahčuje pridávanie vlastných výnimiek alebo vykonávanie zmien pri vývoji rozhrania API alebo pri výskyte novej chyby prípadoch.

Balenie vlastných výnimiek

Zabaliť výnimky znamená zachytiť výnimku, zapuzdreť ju do vlastnej výnimky a potom túto vlastnú výnimku vyvolať, pričom sa ako jej príčina uvedie pôvodná výnimka. Táto technika pomáha poskytnúť kontext chybovým správam a zachováva detaily implementácie skryté pred volajúcim kódom.

Zvážte scenár, v ktorom vaša webová aplikácia interaguje s rozhraním API. Ak API vyvolá a LookupError, môžete to chytiť a potom zvýšiť zvyk APINotFoundError výnimka, ktorá odkazuje ako príčinu na chybu LookupError:

defrequest_api():
try:
# Simulate an API error for demonstration purposes
# Assuming the external API raised a LookupError
raise LookupError("Sorry, You Encountered A LookUpError !!!")
except LookupError as original_exception:
try:
# Wrap the original exception with a custom exception
raise APINotFoundError \
("Requested resource not found.") from original_exception
except APINotFoundError as wrapped_exception:
# Handle the wrapped exception here
print(f"Caught wrapped API exception: {wrapped_exception}")

# or re-raise it if necessary
raise

try:
request_api()
except APINotFoundError as err:
print(f"Caught API exception: {err.__cause__}")

Použite a od doložka s zvýšiť odkaz na pôvodnú výnimku v rámci vašej vlastnej výnimky.

Keď sa vyskytne vlastná výnimka, zahŕňa pôvodnú výnimku ako a __príčina__ atribút poskytujúci prepojenie medzi vlastnou výnimkou a originálom. To vám umožní sledovať pôvod výnimky.

Zabalením výnimiek môžete poskytnúť zmysluplnejší kontext a odosielať používateľom vhodnejšie chybové správy bez toho, aby ste odhalili podrobnosti o internej implementácii vášho kódu alebo rozhrania API. Umožňuje vám tiež spravovať a riešiť typy chýb štruktúrovaným a jednotným spôsobom.

Prispôsobenie správania triedy v Pythone

Zdedením základnej triedy výnimiek, ktorú poskytuje Python, môžete vytvoriť jednoduché a užitočné výnimky, ktoré môžete vyvolať, keď sa vo vašom kóde vyskytnú špecifické chyby. Môžete tiež implementovať vlastné správanie pre vaše triedy výnimiek pomocou magických alebo dunderových metód.