Felhasználó által definiált kivételek a Pythonban példákkal

Felhasználó által definiált kivételek a Pythonban példákkal

A felhasználó által definiált kivételek egy új osztály meghatározásával jönnek létre, amelyből öröklődik A Python beépített kivétele osztályt vagy annak valamelyik alosztályát. Ezzel egyéni hibaüzeneteket hozhatunk létre, és az adott hibákat úgy kezelhetjük, hogy az alkalmazásunk számára ésszerű.

Felhasználó által meghatározott kivételek létrehozásának és használatának lépései

Kövesse az alábbi lépéseket a felhasználó által meghatározott kivételek létrehozásához és használatához a Pythonban:

  • Új kivételosztály meghatározása: Hozzon létre egy új osztályt, amely az Exceptiontől vagy annak bármely alosztályától örököl.
  • A kivétel emelése: Használja a raise utasítást a felhasználó által meghatározott kivétel felemeléséhez, ha egy adott feltétel előfordul.
  • Kezelje a kivételt: Használja a try-except blokkokat a felhasználó által meghatározott kivételek kezelésére.

Példa: Ebben a példában létrehozunk egy egyéni kivételt InvalidAgeError annak biztosítására, hogy az életkor értékei egy érvényes tartományba esnek (0–120).

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  )   

Kimenet
150 -> Age must be between 0 and 120  

Magyarázat:

  • Az InvalidAgeError osztály a kivételtől örökli. Meghatározza egy __forró__ módszer az életkor és az üzenet elfogadására.
  • A __str__ metódus a hiba olvasható karakterlánc-ábrázolását adja vissza.
  • A set_age() függvényben, ha az életkor kívül esik az érvényes tartományon (0–120), a kivétel emelkedik.
  • A try-except blokk elkapja a kivételt, és kiírja a hibaüzenetet.

Kivételes osztályok testreszabása

Amikor egyéni kivételt hozunk létre, alosztályozzuk a Python beépített Exception osztályát (vagy egy olyan alosztályt, mint a ValueError TypeError stb.). Ezután hozzáadhatjuk saját attribútummódszereinket vagy egyéni logikánkat, hogy a kivételünket informatívabbá tegyük.

Az egyéni kivételeket további attribútumok vagy felülbíráló módszerek hozzáadásával is javíthatjuk.

Példa: Itt javítjuk az InvalidAgeError-t egy hibakód hozzáadásával és a hibaüzenet testreszabásával.

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  )   

Kimenet
[Error Code 1001] 150 -> Age must be between 0 and 120  

Magyarázat:

  • Az InvalidAgeError mostantól egy további hibakód attribútumot is tartalmaz.
  • A __str__ metódus felül van írva a hibakód és az életkor megjelenítéséhez.
  • Amikor a set_age(150) végrehajtódik, a kivétel felemelkedik, és a try-except blokkba kerül.
  • A testreszabott hibaüzenet kinyomtatásra kerül, így a hiba leíróbbá válik.

Szabványos kivételek használata alaposztályként

Néha a kivételtől való közvetlen öröklés helyett egyéni kivételt hozhatunk létre egy szabványos kivétel alosztályozásával, például RuntimeError ValueError stb. Ez akkor hasznos, ha az egyéni kivételt egy bizonyos típusú hibaként kell kezelni.

Példa: Ez a példa bemutatja, hogyan hozhat létre egyedi kivételt NetworkError a RuntimeErrorból, amely egy szabványos beépített kivétel.

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  )   

Kimenet
('Connection failed')  

Magyarázat:

  • A NetworkError a RuntimeErrortól örökli, amely egy beépített kivételtípus.
  • Amikor felemeljük, az üzenet az args attribútumban egy sorként kerül tárolásra.
  • A kivétel elkapásra kerül, és a tárolt argumentumai megjelennek.

Valós példa: Érvénytelen e-mail hiba

Íme egy egyszerű példa, amikor egyéni kivételt állítunk elő, ha az e-mail cím nem érvényes:

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  )   

Kimenet
userexample.com -> Invalid email format  

Magyarázat:

  • Egy új InvalidEmailError kivételosztály van meghatározva az e-mail címek ellenőrzésére.
  • Ha az adott e-mail nem tartalmazza a „@” jelet, a rendszer kivételt jelent.
  • A try-except blokk észleli a hibát, és kinyomtatja a formázott üzenetet.

Mikor kell használni a felhasználó által meghatározott kivételeket?

A felhasználó által meghatározott kivételeket a következő forgatókönyvekben kell figyelembe venni:

  • Konkrét hibákat jelez egy alkalmazásban (pl. InvalidAgeError DatabaseConnectionError).
  • Világosabb és leíróbb hibaüzenetek biztosítása.
  • Kapcsolódó hibák csoportjának külön kezelése a kivétel használatával.

A felhasználó által definiált kivételek használatával a programok olvashatóbbá, karbantarthatóbbá és könnyebben hibakereshetővé válnak.

Javasolt kvíz Kvíz szerkesztése 3 kérdés

Mi történik, ha egy felhasználó által meghatározott kivétel a kivétel helyett a RuntimeErrorból örökli?

  • A

    Nem lehet rajtakapni a használatát, kivéve

  • B

    Ellenőrizetlen kivétel lesz

  • C

    A kezelők futásidejű hibaként kezelik

  • D

    Elveszíti az egyéni attribútumokat

Magyarázat:

A RuntimeErrortól való öröklés lehetővé teszi, hogy futásidejű hibaként és egyéni hibaként is kezelhető legyen.

Miért használják általánosan a szuper().__init__(self.msg) függvényt az egyéni kivételosztályokban?

  • A

    A többszörös öröklődés elkerülése érdekében

  • B

    Az alap Kivétel osztály megfelelő inicializálása

  • C

    A visszakövetés felülbírálásához

  • D

    A kivétel automatikus emeléséhez

Magyarázat:

A super() meghívása biztosítja, hogy az alapkivétel megfelelően inicializálódjon az üzenettel.

Mi lesz kinyomtatva, ha egy egyéni kivétel felülírja az __str__() paramétert, és a kivétel belül kerül kinyomtatásra?

  • A

    A felülírt karakterlánc-ábrázolás

  • B

    A kivétel memóriacíme

  • C

    Csak az osztály neve

  • D

    Semmi, hacsak nem használjuk a repr()-et

Magyarázat:

print(e) meghívja a kivételobjektum __str__() értékét.

Felhasználó által definiált kivételek a Pythonban példákkalA kvíz sikeresen kitöltött pontszáma:   2 /3 Pontosság:  0% Jelentkezzen be a magyarázat megtekintéséhez 1 /3 1 /3 < Previous Következő >