Kā izveidot pielāgotus izņēmumus programmā Python

Kā izveidot pielāgotus izņēmumus programmā Python
Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

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.





MUO dienas video RITINĀT, LAI TURPINĀTU AR SATURU

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?

  pieder jūsu kļūda

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ā.

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 :

 class MyCustomError(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:

 if True: 
    raise MyCustomError("A Custom Error Was Raised!!!.")

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

kā iegūt karmu reddit
 if True: 
    raise MyCustomError # shorthand

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

  radās pielāgota kļūda

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.

  pielāgotas kļūdas apstrāde

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.

  Stacktrace, kas parāda neapstrādātu izņēmumu

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 :

 class BaseAPIException(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:

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

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

class APIRateLimitExceeded(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ā.

 def request_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.

kā iegūt e -pasta ip adresi
  mantot pielāgotu izņēmumu

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, tādējādi atvieglojot pielāgotu izņēmumu pievienošanu vai izmaiņu veikšanu, API attīstoties vai saskaroties ar jauniem 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:

 def request_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ā.

  iesaiņojuma pielāgotais izņēmums

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ņēmuma 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.