Poikkeukset ovat tehokas ja siro tapa käsitellä Python-ohjelmien virheitä. Mukautetut poikkeukset vievät tämän voiman uudelle tasolle.

Pythonin sisäänrakennetut poikkeusluokat eivät käsittele tiettyjä virhetilanteita, joita koodissasi voi esiintyä. Tällaisissa tapauksissa sinun on luotava mukautettuja poikkeuksia käsitelläksesi nämä virheet tehokkaasti.

Pythonissa voit määrittää mukautettuja poikkeuksia ja nostaa niitä esiin tiettyjen virhetilanteiden sattuessa. Voit hallita tiettyjä, informatiivisia virheitä mukautetuin poikkeuksin, mikä parantaa koodisi luettavuutta ja ylläpidettävyyttä.

Miksi tarvitset mukautettuja poikkeuksia?

Sovelluksen kehittämisen aikana voi syntyä erilaisia ​​virheskenaarioita koodin muutoksista, integroinnista muihin pakkauksiin tai kirjastoihin sekä vuorovaikutuksiin ulkoisten sovellusten kanssa. On erittäin tärkeää käsitellä näitä virheitä, jotta voit toipua niistä tai käsitellä epäonnistumisia sulavasti.

Python tarjoaa valikoiman sisäänrakennettu poikkeus luokat, jotka kattavat virheet, kuten

instagram viewer
ValueError, Tyyppivirhe, FileNotFoundError, ja enemmän. Vaikka nämä sisäänrakennetut poikkeukset palvelevat tarkoitustaan ​​hyvin, ne voivat vain toisinaan edustaa tarkasti sovelluksessasi mahdollisesti esiintyviä virheitä.

Luomalla mukautettuja poikkeuksia voit räätälöidä ne sovelluksesi vaatimuksia vastaaviksi ja tarjota tietoa koodiasi käyttäville kehittäjille.

Kuinka määrittää mukautettuja poikkeuksia

Voit luoda mukautettuja poikkeuksia määrittele Python-luokka joka perii Poikkeusluokka. The Poikkeus luokka tarjoaa perustoiminnot, joita tarvitset poikkeuksia varten, ja voit muokata sitä lisäämään ominaisuuksia erityistarpeidesi mukaan.

Kun luot mukautettuja poikkeusluokkia, pidä ne yksinkertaisina ja sisällytä samalla tarvittavat attribuutit virhetietojen tallentamista varten. Poikkeuskäsittelijät voivat sitten käyttää näitä määritteitä käsitelläkseen virheitä asianmukaisesti.

Tässä on mukautettu poikkeusluokka, MyCustomError:

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

Tämä luokka hyväksyy valinnaisen viestiargumentin alustuksen aikana. Se käyttää super() tapa kutsua perustan rakentaja Poikkeus luokkaa, mikä on välttämätöntä poikkeusten käsittelyssä.

Kuinka lisätä mukautettuja poikkeuksia

Voit nostaa virheen käyttämällä nostaa avainsana, jota seuraa mukautetun poikkeusluokkasi esiintymä, välittämällä sille virheilmoituksen argumenttina:

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

Voit myös esittää virheen välittämättä argumentteja:

ifTrue:
raise MyCustomError # shorthand

Kumpikin muoto sopii mukautettujen virheiden nostamiseen.

Kuinka käsitellä mukautettuja poikkeuksia

Mukautettujen poikkeusten käsittely noudattaa samaa lähestymistapaa kuin sisäänrakennettujen poikkeusten käsittely. Käyttää yrittää, paitsi, ja vihdoinkin estää mukautettuja poikkeuksia ja ryhtyä tarvittaviin toimiin.

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ällä tavalla voit käsitellä kaikenlaisia ​​mukautettuja poikkeuksia.

Jos poikkeus tapahtuu suorituksen a yrittää lohko, vastaava paitsi lohko voi tarttua ja käsitellä sitä. Jos ei ole sopivaa paitsi esto poikkeuksen käsittelemiseksi, mikä tahansa vihdoinkin lohko suoritetaan, minkä jälkeen poikkeus nostetaan uudelleen. Käytä vihdoinkin estää ensisijaisesti suorittamaan puhdistustehtäviä, jotka on suoritettava kaikissa olosuhteissa riippumatta siitä, tapahtuuko poikkeus vai ei.

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

Tässä näytteessä a Keyboard Interrupt poikkeus tapahtuu, mutta paitsi lohko vain kahvat MyCustomError poikkeuksia. Tässä tapauksessa vihdoinkin lohko suoritetaan, ja sitten käsittelemätön poikkeus korottaa uudelleen.

Mukautettujen virheluokkien periminen

Perustuu olio-ohjelmoinnin käsite (OOP), voit myös periä mukautetuista poikkeusluokista, kuten tavallisista luokista. Perimällä mukautetusta poikkeusluokasta voit luoda virheluokkia, jotka tarjoavat poikkeukselle tarkemman kontekstin. Tämän lähestymistavan avulla voit käsitellä virheitä koodisi eri tasoilla ja antaa paremman käsityksen siitä, mikä virheen aiheutti.

Oletetaan, että olet kehittämässä verkkosovellusta, joka on vuorovaikutuksessa ulkoisen API: n kanssa. Tällä API: lla voi olla erilaisia ​​virheskenaarioita. Haluat käsitellä näitä virheitä johdonmukaisesti ja selkeästi koko koodin ajan. Tämän saavuttamiseksi luo mukautettu poikkeusluokka, BaseAPI poikkeus:

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

Kun sinulla on tämä mukautettu peruspoikkeusluokka, voit luoda lapsipoikkeusluokkia, jotka perivät siitä:

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

Nosta ja ota kiinni nämä mukautetut poikkeukset, kun soitat sovellusliittymään verkkosovelluksessasi. Käsittele niitä vastaavasti käyttämällä koodisi asianmukaista logiikkaa.

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

Viimeinen paitsi lauseke tarkistaa emoluokkaa ja toimii kaikkien muiden API-virheiden varalta.

Kun perit mukautettuja poikkeusluokkia, voit käsitellä API-virheitä tehokkaasti. Tämän lähestymistavan avulla voit erottaa virheenkäsittelysi API: n toteutustiedoista, helpottaa mukautettujen poikkeuksien lisäämistä tai muutosten tekemistä API: n kehittyessä tai kohtaa uuden virheen tapauksia.

Mukautettujen poikkeusten kääriminen

Poikkeusten rivittäminen tarkoittaa poikkeuksen saamista kiinni, sen kapseloimista mukautetun poikkeuksen sisään ja sitten mukautetun poikkeuksen nostamista viittaamalla alkuperäiseen poikkeukseen sen syynä. Tämä tekniikka auttaa tarjoamaan kontekstin virheilmoituksille ja pitää toteutustiedot piilossa kutsukoodilta.

Harkitse tilannetta, jossa verkkosovelluksesi on vuorovaikutuksessa API: n kanssa. Jos API herättää a LookupError, voit saada sen kiinni ja nosta sitten mukautettua APINotFoundError poikkeus, joka viittaa LookupErrorin syynä:

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

Käytä alkaen lausekkeen kanssa nostaa lauseke, joka viittaa alkuperäiseen poikkeukseen mukautetun poikkeuksen sisällä.

Kun mukautettu poikkeus tapahtuu, se sisältää alkuperäisen poikkeuksen muodossa a __syy__ attribuutti, joka tarjoaa linkin mukautetun poikkeuksen ja alkuperäisen välillä. Näin voit jäljittää poikkeuksen alkuperän.

Käärimällä poikkeuksia voit tarjota merkityksellisemmän kontekstin ja lähettää asianmukaisempia virheilmoituksia käyttäjille paljastamatta koodisi tai API: n sisäisiä toteutustietoja. Sen avulla voit myös hallita ja käsitellä virhetyyppejä jäsennellyllä ja yhtenäisellä tavalla.

Luokkakäyttäytymisen mukauttaminen Pythonissa

Perimällä Pythonin tarjoaman peruspoikkeusluokan voit luoda yksinkertaisia ​​ja hyödyllisiä poikkeuksia, joita voit nostaa esiin, kun koodissasi tapahtuu tiettyjä virheitä. Voit myös toteuttaa mukautettua käyttäytymistä poikkeusluokillesi magic- tai dunder-menetelmien avulla.