Išimtys yra galingas ir grakštus būdas tvarkyti klaidas jūsų Python programose. Pasirinktinės išimtys perkelia šią galią į naują lygį.

Python integruotos išimčių klasės nesprendžia tam tikrų klaidų situacijų, kurios gali kilti jūsų kode. Tokiais atvejais turėsite sukurti pasirinktines išimtis, kad šios klaidos būtų tvarkomos efektyviai.

„Python“ galite apibrėžti pasirinktines išimtis ir pakelti jas, kai atsiranda konkrečių klaidų. Galite valdyti konkrečias informatyvias klaidas su pasirinktomis išimtimis, pagerindami kodo skaitomumą ir priežiūrą.

Kodėl jums reikia individualių išimčių?

Kuriant programą, dėl kodo pakeitimų, integracijos su kitais paketais ar bibliotekomis ir sąveikos su išorinėmis programėlėmis gali atsirasti įvairių klaidų scenarijų. Labai svarbu ištaisyti šias klaidas, kad po jų atsigautumėte arba su gedimais susitvarkytumėte grakščiai.

Python siūlo daugybę įmontuota išimtis klasės, apimančios tokias klaidas kaip ValueError, Tipo klaida, „FileNotFoundError“., ir dar. Nors šios integruotos išimtys puikiai atlieka savo paskirtį, jos tik kartais gali tiksliai parodyti klaidas, kurios gali atsirasti jūsų programoje.

instagram viewer

Kurdami pasirinktines išimtis galite jas pritaikyti konkrečiai, kad atitiktų jūsų programos reikalavimus, ir pateikti informaciją kūrėjams, kurie naudoja jūsų kodą.

Kaip apibrėžti tinkintas išimtis

Norėdami sukurti pasirinktines išimtis, apibrėžti Python klasę kad paveldi iš Išimties klasė. The Išimtis klasėje siūlomos pagrindinės funkcijos, kurių prireiks norint tvarkyti išimtis, ir galite ją tinkinti, kad pridėtumėte funkcijų pagal savo konkrečius poreikius.

Kurdami pasirinktines išimčių klases, laikykite jas paprastas ir įtraukite būtinus atributus klaidų informacijai saugoti. Tada išimčių tvarkytojai gali pasiekti šiuos atributus, kad tinkamai tvarkytų klaidas.

Čia yra tinkinta išimties klasė, MyCustomError:

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

Ši klasė inicijavimo metu priima neprivalomą pranešimo argumentą. Jis naudoja super () metodas iškviesti bazės konstruktorių Išimtis klasė, kuri yra būtina išimčių tvarkymui.

Kaip padidinti pasirinktines išimtis

Norėdami iškelti klaidą, naudokite pakelti raktinis žodis, po kurio nurodomas pasirinktinės išimties klasės pavyzdys, perduodamas klaidos pranešimą kaip argumentą:

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

Taip pat galite iškelti klaidą nepateikdami jokių argumentų:

ifTrue:
raise MyCustomError # shorthand

Bet kuris formatas yra tinkamas priskirtoms klaidoms iškelti.

Kaip elgtis su pasirinktomis išimtimis

Tinkintų išimčių tvarkymas taikomas taip pat kaip integruotų išimčių tvarkymas. Naudokite bandyti, išskyrus, ir pagaliau blokuoja, kad gautų pasirinktines išimtis ir imtųsi atitinkamų veiksmų.

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")

Tokiu būdu galite tvarkyti visas iškeltas pasirinktines išimtis.

Jei vykdant a. įvyksta išimtis bandyti blokas, atitinkamas išskyrus blokas gali jį sugauti ir valdyti. Jei nėra tinkamo išskyrus blokuoti, kad būtų galima apdoroti išimtį, bet kurią pagaliau bus vykdomas blokas, po kurio vėl bus padidinta išimtis. Naudoti pagaliau blokuoti pirmiausia, kad atliktumėte valymo užduotis, kurios turi būti vykdomos bet kokiomis aplinkybėmis, nesvarbu, ar yra išimtis, ar ne.

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

Šiame pavyzdyje a Klaviatūros pertraukimas pasitaiko išimtis, tačiau išskyrus blokuoti tik rankenas MyCustomError išimtis. Šiuo atveju, pagaliau blokas paleidžiamas, o tada neapdorota išimtis vėl pakeliama.

Tinkintų klaidų klasių paveldėjimas

Remiantis Objektinio programavimo koncepcija (OOP), taip pat galite paveldėti iš pasirinktinių išimčių klasių, kaip ir įprastas klases. Paveldėdami iš pasirinktinės išimties klasės, galite sukurti klaidų klases, kurios suteikia konkretesnį išimties kontekstą. Šis metodas leidžia tvarkyti klaidas skirtingais kodo lygiais ir geriau suprasti, kas sukėlė klaidą.

Tarkime, kad kuriate žiniatinklio programą, kuri sąveikauja su išorine API. Ši API gali turėti skirtingus klaidų scenarijus. Šias klaidas norėsite nuosekliai ir aiškiai tvarkyti visame kode. Norėdami tai pasiekti, sukurkite pasirinktinę išimties klasę, BazinėAPI išimtis:

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

Kai turėsite šią pagrindinę tinkintą išimties klasę, galite sukurti antrines išimties klases, kurios paveldės iš jos:

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

Pakelkite ir gaukite šias tinkintas išimtis, kai skambinate į API savo žiniatinklio programoje. Atitinkamai tvarkykite juos naudodami atitinkamą kodo logiką.

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}")

Paskutinė sąlyga, išskyrus atvejus, tikrina pirminę klasę ir veikia kaip visų kitų su API susijusių klaidų suvestinė.

Kai paveldėsite pasirinktines išimčių klases, galite efektyviai tvarkyti API klaidas. Šis metodas leidžia atskirti klaidų tvarkymą nuo API diegimo informacijos, kad būtų lengviau pridėti pasirinktinių išimčių arba atlikti pakeitimus, kai API vystosi arba atsiranda nauja klaida atvejų.

Pasirinktinių išimčių vyniojimas

Įtraukti išimtis reiškia užfiksuoti išimtį, įtraukti ją į tinkintą išimtį ir tada pakelti tą tinkintą išimtį, nurodydami pirminę išimtį kaip jos priežastį. Ši technika padeda pateikti klaidų pranešimų kontekstą ir iškviečiamojo kodo paslėpti diegimo duomenis.

Apsvarstykite scenarijų, kai jūsų žiniatinklio programa sąveikauja su API. Jei API iškelia a Lookup Error, galite sugauti, tada pakelti papročius APINotFoundError išimtis, kuri nurodo LookupError priežastį:

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__}")

Naudoti sąlyga su pakelti teiginį, kad būtų nuoroda į pradinę išimtį jūsų tinkintoje išimtyje.

Kai atsiranda tinkinta išimtis, ji apima pradinę išimtį kaip a __priežastis__ atributas, suteikiantis ryšį tarp tinkintos išimties ir originalo. Tai leidžia atsekti išimties kilmę.

Apvyniodami išimtis galite pateikti prasmingesnį kontekstą ir siųsti tinkamesnius klaidų pranešimus vartotojams, neatskleisdami vidinės kodo ar API diegimo informacijos. Tai taip pat leidžia struktūriškai ir vienodai valdyti ir spręsti klaidų tipus.

Klasės elgesio pritaikymas Python

Paveldėdami pagrindinę išimčių klasę, kurią teikia Python, galite sukurti paprastas ir naudingas išimtis, kurias galite iškelti, kai kode įvyksta konkrečių klaidų. Taip pat galite pritaikyti savo išimčių klasių elgseną naudodami magijos ar dunder metodus.