Erandid on võimas ja elegantne viis Pythoni programmide vigade käsitlemiseks. Kohandatud erandid viivad selle võimsuse uuele tasemele.

Pythoni sisseehitatud erandiklassid ei käsitle teatud tõrkeolukordi, mis võivad teie koodis tekkida. Sellistel juhtudel peate nende vigade tõhusaks käsitlemiseks looma kohandatud erandid.

Pythonis saate määratleda kohandatud erandeid ja tõsta neid konkreetsete veaolukordade ilmnemisel. Saate hallata spetsiifilisi informatiivseid vigu kohandatud eranditega, parandades oma koodi loetavust ja hooldatavust.

Miks vajate kohandatud erandeid?

Rakenduse arendamise käigus võivad tekkida erinevad veastsenaariumid, mis on tingitud muudatustest koodis, integreerimisest teiste pakettide või teekidega ning interaktsioonidest väliste rakendustega. Nende vigade käsitlemine on ülioluline, et neist taastuda või tõrgetega toime tulla.

Python pakub laia valikut sisseehitatud erand klassid, mis hõlmavad selliseid vigu nagu ValueError, Tüübiviga, FileNotFoundError, ja veel. Kuigi need sisseehitatud erandid täidavad oma eesmärki hästi, võivad need ainult mõnikord täpselt kajastada teie rakenduses esineda võivaid vigu.

instagram viewer

Kohandatud erandeid luues saate neid kohandada vastavalt teie rakenduse nõuetele ja pakkuda teavet teie koodi kasutavatele arendajatele.

Kuidas määratleda kohandatud erandeid

Kohandatud erandite loomiseks määratleda Pythoni klass mis pärib Erandklass. The Erand klass pakub põhifunktsioone, mida peate eranditega toime tulema, ja saate seda kohandada, et lisada funktsioone vastavalt teie konkreetsetele vajadustele.

Kohandatud erandiklasside loomisel hoidke need lihtsad, lisades samal ajal veateabe salvestamiseks vajalikud atribuudid. Erandite töötlejad pääsevad seejärel neile atribuutidele juurde, et vigu õigesti käsitleda.

Siin on kohandatud erandiklass, MyCustomError:

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

See klass aktsepteerib lähtestamise ajal valikulist sõnumiargumenti. See kasutab Super() meetod aluse konstruktori kutsumiseks Erand klass, mis on erandite käsitlemiseks hädavajalik.

Kuidas suurendada kohandatud erandeid

Vea esilekutsumiseks kasutage nuppu tõsta märksõna, millele järgneb teie kohandatud erandiklassi eksemplar, edastades sellele argumendina veateate:

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

Saate vea tõstatada ka argumente edastamata:

ifTrue:
raise MyCustomError # shorthand

Kumbki vorming sobib kohandatud vigade esilekutsumiseks.

Kuidas kohandatud erandeid käsitleda

Kohandatud erandite käsitlemine järgib sama lähenemisviisi nagu sisseehitatud erandite käsitlemine. Kasutage proovi, välja arvatudja lõpuks blokeerib kohandatud erandite tabamiseks ja asjakohaste meetmete võtmiseks.

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

Nii saate hakkama igasuguste kohandatud eranditega.

Kui a täitmise ajal ilmneb erand proovi plokk, vastav välja arvatud plokk saab selle kinni püüda ja sellega hakkama saada. Kui sobivat pole välja arvatud blokk erandi käsitlemiseks, mis tahes lõpuks blokk käivitatakse, millele järgneb uuesti erandi tõstmine. Kasuta lõpuks blokeerige peamiselt puhastustoimingute tegemiseks, mis peavad töötama mis tahes olukorras, olenemata sellest, kas erand esineb või mitte.

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

Selles proovis on a Klaviatuuri katkestus esineb erand, kuid välja arvatud plokk ainult käepidemed MyCustomError erandid. Sel juhul on lõpuks blokk jookseb ja siis käsitlemata erand tõstab uuesti.

Kohandatud veaklasside pärimine

Põhinedes objektorienteeritud programmeerimise kontseptsioon (OOP), saate pärida ka kohandatud erandiklassidest, nagu tavaklassid. Pärides kohandatud erandiklassist, saate luua veaklasse, mis pakuvad erandile täpsemat konteksti. See lähenemisviis võimaldab teil käsitleda koodi erinevatel tasanditel esinevaid vigu ja annab parema ülevaate vea põhjustest.

Oletame, et arendate veebirakendust, mis suhtleb välise API-ga. Sellel API-l võivad olla erinevad veastsenaariumid. Soovite neid vigu kogu koodis järjekindlalt ja selgelt käsitleda. Selle saavutamiseks looge kohandatud erandiklass, BaseAPIerand:

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

Kui teil on see põhiline kohandatud erandiklass, saate luua alam-erandklassid, mis pärivad sellest:

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

Tõstke ja püüdke kinni need kohandatud erandid, kui helistate oma veebirakenduses API-le. Käsitsege neid vastavalt, kasutades oma koodis sobivat loogikat.

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

Viimane va klausel kontrollib ülemklassi ja toimib kõigi muude API-ga seotud vigade puhul.

Kohandatud erandiklasside pärimisel saate API-s vigu tõhusalt käsitleda. See lähenemisviis võimaldab teil eraldada veakäsitluse API juurutamise üksikasjadest, muudab kohandatud erandite lisamise või muudatuste tegemise lihtsamaks API arenedes või uue vea ilmnemisel juhtudel.

Kohandatud erandite mähkimine

Erandite mässimine tähendab erandi püüdmist, selle kapseldamist kohandatud erandisse ja seejärel kohandatud erandi tõstmist, viidates selle põhjusena algsele erandile. See meetod aitab luua konteksti veateadetele ja hoiab rakenduse üksikasjad kutsuva koodi eest peidus.

Mõelge stsenaariumile, kus teie veebirakendus suhtleb API-ga. Kui API tõstab a Otsinguviga, saate selle kinni püüda ja seejärel kohandada APINotFoundError erand, mis viitab põhjusena LookupErrorile:

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

Kasuta alates klausel koos tõsta avaldus, mis viitab teie kohandatud erandi algsele erandile.

Kohandatud erandi ilmnemisel sisaldab see algset erandit kui a __põhjus__ atribuut, pakkudes linki kohandatud erandi ja originaali vahel. See võimaldab teil jälgida erandi päritolu.

Erandite mähkimisega saate pakkuda sisukamat konteksti ja saata kasutajatele sobivamaid veateateid ilma oma koodi või API sisemiste juurutuste üksikasju paljastamata. Samuti võimaldab see hallata ja käsitleda tõrketüüpe struktureeritud ja ühtsel viisil.

Klassi käitumise kohandamine Pythonis

Pärides Pythoni pakutava põhierandiklassi, saate luua lihtsaid ja kasulikke erandeid, mida saate esile tõsta, kui teie koodis ilmnevad konkreetsed vead. Samuti saate rakendada oma erandiklasside jaoks kohandatud käitumist maagiliste või dunder-meetodite abil.