logo

Käyttäjän määrittämät poikkeukset Pythonissa esimerkein

Käyttäjän määrittämät poikkeukset luodaan määrittämällä uusi luokka, joka perii Pythonin sisäänrakennettu poikkeus luokka tai jokin sen alaluokista. Näin voimme luoda mukautettuja virheilmoituksia ja käsitellä tiettyjä virheitä sovelluksemme kannalta järkevällä tavalla.

Vaiheet käyttäjän määrittämien poikkeuksien luomiseen ja käyttämiseen

Noudata näitä ohjeita luodaksesi ja käyttääksesi käyttäjän määrittämiä poikkeuksia Pythonissa:

  • Määritä uusi poikkeusluokka: Luo uusi luokka, joka perii Exceptionista tai mistä tahansa sen alaluokista.
  • Nosta poikkeus: Käytä raise-käskyä nostaaksesi käyttäjän määrittämää poikkeusta tietyn ehdon esiintyessä.
  • Käsittele poikkeus: Käytä try-except-lohkoja käsitelläksesi käyttäjän määrittämää poikkeusta.

Esimerkki: Tässä esimerkissä luomme mukautetun poikkeuksen InvalidAgeError varmistaaksemme, että ikäarvot ovat kelvollisen alueen (0–120) sisällä.



Python
# Step 1: Define a custom exception class class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120'): self.age = age self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.age} -> {self.msg}' # Step 2: Use the custom exception in your code def set_age(age): if age < 0 or age > 120: raise InvalidAgeError(age) else: print(f'Age set to: {age}') # Step 3: Handling the custom exception try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

Lähtö
150 -> Age must be between 0 and 120 

Selitys:

  • InvalidAgeError-luokka perii Poikkeuksen. Se määrittelee an __kuuma__ tapa hyväksyä ikä ja viesti.
  • Metodi __str__ palauttaa virheen luettavan merkkijonoesityksen.
  • Kohdassa set_age(), jos ikä on kelvollisen alueen (0–120) ulkopuolella, poikkeus korotetaan.
  • Try-except-lohko havaitsee poikkeuksen ja tulostaa virheilmoituksen.

Poikkeusluokkien mukauttaminen

Kun luomme mukautetun poikkeuksen, alaluokittelemme Pythonin sisäänrakennetun Exception-luokan (tai alaluokan, kuten ValueError TypeError jne.). Voimme sitten lisätä omia attribuuttimenetelmiämme tai mukautettua logiikkaa tehdäksemme poikkeuksestamme informatiivisemman.

Voimme myös parantaa mukautettuja poikkeuksia lisäämällä ylimääräisiä määritteitä tai ohittavia menetelmiä.

operaattorit python-ohjelmoinnissa

Esimerkki: Tässä parannamme InvalidAgeErroria lisäämällä virhekoodin ja mukauttamalla virheviestiä.

Python
class InvalidAgeError(Exception): def __init__(self age msg='Age must be between 0 and 120' error_code=1001): self.age = age self.msg = msg self.error_code = error_code super().__init__(self.msg) def __str__(self): return f'[Error Code {self.error_code}] {self.age} -> {self.msg}' try: set_age(150) # This will raise the custom exception except InvalidAgeError as e: print(e) 

Lähtö
[Error Code 1001] 150 -> Age must be between 0 and 120 

Selitys:

  • InvalidAgeError sisältää nyt lisäattribuutin error_code.
  • __str__-menetelmä ohitetaan näyttämään sekä virhekoodi että ikä.
  • Kun set_age(150) suoritetaan, poikkeus nostetaan ja kiinnitetään try-except-lohkoon.
  • Mukautettu virheilmoitus tulostetaan, mikä tekee virheestä kuvaavamman.

Vakiopoikkeusten käyttäminen perusluokkana

Joskus sen sijaan, että periisimme suoraan poikkeuksesta, voimme luoda mukautetun poikkeuksen alaluokittamalla vakiopoikkeuksen, kuten RuntimeError ValueError jne. Tämä on hyödyllistä, kun mukautettua poikkeusta pitäisi käsitellä tietynlaisena virheenä.

Esimerkki: Tämä esimerkki näyttää, kuinka luodaan mukautettu NetworkError-poikkeus perimällä RuntimeError, joka on tavallinen sisäänrakennettu poikkeus.

Python
# NetworkError has base RuntimeError and not Exception class NetworkError(RuntimeError): def __init__(self arg): self.args = (arg) # store as tuple try: raise NetworkError('Connection failed') except NetworkError as e: print(e.args) 

Lähtö
('Connection failed') 

Selitys:

  • NetworkError perii RuntimeErrorin, joka on sisäänrakennettu poikkeustyyppi.
  • Kun viesti nostetaan ylös, se tallennetaan args-attribuutissa monikkona.
  • Poikkeus kiinnitetään ja sen tallennetut argumentit näytetään.

Tosimaailman esimerkki: Virheellinen sähköposti

Tässä on yksinkertainen esimerkki, jossa nostamme mukautetun poikkeuksen, jos sähköpostiosoite ei ole kelvollinen:

Python
class InvalidEmailError(Exception): def __init__(self email msg='Invalid email format'): self.email = email self.msg = msg super().__init__(self.msg) def __str__(self): return f'{self.email} -> {self.msg}' def set_email(email): if '@' not in email: raise InvalidEmailError(email) print(f'Email set to: {email}') try: set_email('userexample.com') except InvalidEmailError as e: print(e) 

Lähtö
userexample.com -> Invalid email format 

Selitys:

  • Uusi poikkeusluokka InvalidEmailError on määritetty vahvistamaan sähköpostiosoitteet.
  • Jos annettu sähköposti ei sisällä @-merkkiä, poikkeus tehdään.
  • Yritä paitsi -lohko havaitsee virheen ja tulostaa muotoillun viestin.

Milloin käyttää käyttäjän määrittämiä poikkeuksia?

Käyttäjän määrittämiä poikkeuksia tulee harkita seuraavissa skenaarioissa:

  • Ilmoittaa tiettyjä virheitä sovelluksessa (esim. InvalidAgeError DatabaseConnectionError).
  • Selkeämpiä ja kuvaavampia virheilmoituksia.
  • Asiaan liittyvien virheiden ryhmän käsittely erikseen käyttämällä paitsi.

Käyttämällä käyttäjän määrittämiä poikkeuksia ohjelmista tulee helpommin luettavia, ylläpidettäviä ja helpompia korjata.