Izņēmumi ir spēcīgs un elegants veids, kā rīkoties ar kļūdām jūsu Python programmās. Pielāgoti izņēmumi šo spēku paceļ jaunā līmenī.

Python iebūvētās izņēmumu klases nerisina noteiktas kļūdu situācijas, kas var rasties jūsu kodā. Šādos gadījumos jums būs jāizveido pielāgoti izņēmumi, lai efektīvi novērstu šīs kļūdas.

Programmā Python varat definēt pielāgotus izņēmumus un paaugstināt tos, kad rodas noteiktas kļūdas. Varat pārvaldīt konkrētas, informatīvas kļūdas ar pielāgotiem izņēmumiem, uzlabojot koda lasāmību un apkopi.

Kāpēc jums ir nepieciešami pielāgoti izņēmumi?

Lietojumprogrammas izstrādes laikā var rasties dažādi kļūdu scenāriji, ko izraisa izmaiņas kodā, integrācija ar citām pakotnēm vai bibliotēkām un mijiedarbība ar ārējām lietotnēm. Ir ļoti svarīgi rīkoties ar šīm kļūdām, lai tās atgūtu vai graciozi risinātu neveiksmes.

Python piedāvā virkni iebūvēts izņēmums klases, kas aptver tādas kļūdas kā ValueError, Tipa kļūda, FileNotFoundError, un vēl. Lai gan šie iebūvētie izņēmumi labi kalpo savam mērķim, tie var tikai dažkārt precīzi atspoguļot kļūdas, kas var rasties jūsu lietojumprogrammā.

instagram viewer

Izveidojot pielāgotus izņēmumus, varat tos īpaši pielāgot, lai tie atbilstu jūsu lietojumprogrammas prasībām, un sniegt informāciju izstrādātājiem, kuri izmanto jūsu kodu.

Kā definēt pielāgotus izņēmumus

Lai izveidotu pielāgotus izņēmumus, definējiet Python klasi kas manto no Izņēmuma klase. The Izņēmums klase piedāvā pamata funkcionalitāti, kas jums būs nepieciešama izņēmumu gadījumā, un jūs varat to pielāgot, lai pievienotu funkcijas atbilstoši jūsu īpašajām vajadzībām.

Veidojot pielāgotas izņēmumu klases, saglabājiet tās vienkāršas, vienlaikus iekļaujot nepieciešamos atribūtus kļūdu informācijas glabāšanai. Izņēmumu apstrādātāji pēc tam var piekļūt šiem atribūtiem, lai pareizi apstrādātu kļūdas.

Šeit ir pielāgota izņēmuma klase, MyCustomError:

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

Šī klase inicializācijas laikā pieņem neobligātu ziņojuma argumentu. Tas izmanto super() metode bāzes konstruktora izsaukšanai Izņēmums klase, kas ir būtiska izņēmumu apstrādei.

Kā palielināt pielāgotus izņēmumus

Lai parādītu kļūdu, izmantojiet paaugstināt atslēgvārdam, kam seko jūsu pielāgotās izņēmuma klases gadījums, nododot tam kļūdas ziņojumu kā argumentu:

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

Varat arī norādīt kļūdu, nenododot nekādus argumentus:

ifTrue:
raise MyCustomError # shorthand

Jebkurš formāts ir piemērots pielāgotu kļūdu palielināšanai.

Kā rīkoties ar pielāgotiem izņēmumiem

Pielāgotu izņēmumu apstrāde notiek tādā pašā veidā kā iebūvēto izņēmumu apstrāde. Izmantot mēģināt, izņemot, un beidzot blokus, lai uztvertu pielāgotus izņēmumus un veiktu atbilstošas ​​darbības.

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ādā veidā jūs varat rīkoties ar visu veidu pielāgotajiem izņēmumiem.

Ja a izpildes laikā notiek izņēmums mēģināt bloks, atbilstošs izņemot bloks var to noķert un apstrādāt. Ja nav piemērota izņemot bloķēt, lai apstrādātu izņēmumu, jebkuru beidzot tiks izpildīts bloks, kam sekos izņēmuma palielināšana. Lieto beidzot bloķēt galvenokārt, lai veiktu tīrīšanas uzdevumus, kas jāveic jebkuros apstākļos neatkarīgi no tā, vai ir vai nav izņēmums.

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

Šajā paraugā a Tastatūras pārtraukums gadās izņēmums, bet izņemot bloķē tikai rokturus MyCustomError izņēmumi. Šajā gadījumā, beidzot bloks tiek izpildīts, un pēc tam neapstrādātais izņēmums atkal tiek paaugstināts.

Pielāgotu kļūdu klašu mantošana

Pamatojoties uz Objektorientētās programmēšanas koncepcija (OOP), varat arī mantot no pielāgotām izņēmumu klasēm, tāpat kā parastajām klasēm. Mantojot no pielāgotas izņēmuma klases, varat izveidot kļūdu klases, kas izņēmumam nodrošina konkrētāku kontekstu. Šī pieeja ļauj apstrādāt kļūdas dažādos koda līmeņos un nodrošina labāku izpratni par to, kas izraisīja kļūdu.

Pieņemsim, ka izstrādājat tīmekļa lietojumprogrammu, kas mijiedarbojas ar ārēju API. Šim API var būt dažādi kļūdu scenāriji. Šīs kļūdas vēlēsities konsekventi un skaidri apstrādāt visā kodā. Lai to panāktu, izveidojiet pielāgotu izņēmuma klasi, BaseAPI izņēmums:

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

Kad jums ir šī pamata pielāgotā izņēmuma klase, varat izveidot pakārtotās izņēmuma klases, kas manto no tās:

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

Paaugstiniet un tveriet šos pielāgotos izņēmumus, veicot izsaukumus uz API savā tīmekļa lietojumprogrammā. Attiecīgi rīkojieties ar tiem, izmantojot atbilstošo loģiku savā kodā.

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

Pēdējā klauzula, izņemot klauzulu, pārbauda vecāku klasi un darbojas kā visu citu ar API saistītu kļūdu novēršana.

Kad mantojat pielāgotas izņēmuma klases, varat efektīvi apstrādāt API kļūdas. Šī pieeja ļauj nošķirt kļūdu apstrādi no API ieviešanas informācijas, atvieglojot pielāgotu izņēmumu pievienošanu vai izmaiņu veikšanu, API attīstoties vai saskaroties ar jaunu kļūdu gadījumiem.

Pielāgotu izņēmumu iesaiņošana

Aplauzt izņēmumus nozīmē uztvert izņēmumu, iekapsulēt to pielāgotā izņēmumā un pēc tam paaugstināt šo pielāgoto izņēmumu, atsaucoties uz sākotnējo izņēmumu kā tā cēloni. Šis paņēmiens palīdz nodrošināt kontekstu kļūdu ziņojumiem un paslēpj ieviešanas informāciju no izsaucēja koda.

Apsveriet situāciju, kad jūsu tīmekļa lietotne mijiedarbojas ar API. Ja API rada a Uzmeklēšanas kļūda, varat to noķert, pēc tam paceliet pasūtījumu APINotFoundError izņēmums, kas atsaucas uz LookupError kā cēloni:

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

Lieto no klauzula ar paaugstināt paziņojumu, lai atsauktos uz sākotnējo izņēmumu jūsu pielāgotajā izņēmumā.

Kad notiek pielāgots izņēmums, tas ietver sākotnējo izņēmumu kā a __cēlonis__ atribūts, nodrošinot saikni starp pielāgoto izņēmumu un oriģinālu. Tas ļauj izsekot izņēmuma izcelsmei.

Iesaiņojot izņēmumus, varat nodrošināt jēgpilnāku kontekstu un nosūtīt lietotājiem piemērotākus kļūdu ziņojumus, neatklājot sava koda vai API iekšējās ieviešanas informāciju. Tas arī ļauj pārvaldīt un novērst kļūdu veidus strukturētā un vienotā veidā.

Klases uzvedības pielāgošana programmā Python

Pārmantojot Python nodrošināto pamata izņēmumu klasi, varat izveidot vienkāršus un noderīgus izņēmumus, kurus varat izmantot, ja kodā rodas noteiktas kļūdas. Varat arī ieviest pielāgotu darbību savām izņēmuma klasēm, izmantojot maģijas vai dunder metodes.