Hogyan definiálhatók az egyedi kivételek a Pythonban? (Példákkal)

Ebben az oktatóanyagban megtanulhatja, hogyan definiálja az egyedi kivételeket az igényeitől függően példák segítségével.

A Python számos beépített kivétellel kényszeríti a programot arra, hogy hibát adjon ki, ha valami nem megfelelő a programban.

Előfordulhat azonban, hogy saját egyedi kivételeket kell létrehoznia, amelyek a célját szolgálják.

Egyedi kivételek létrehozása

A Pythonban a felhasználók egyedi osztályokat hozhatnak létre új osztály létrehozásával. Ezt a kivételosztályt közvetlenül vagy közvetve a beépített Exceptionosztályból kell levezetni . A beépített kivételek nagy része szintén ebből az osztályból származik.

 >>> class CustomError(Exception):… pass… >>> raise CustomError Traceback (most recent call last):… __main__.CustomError >>> raise CustomError("An error occurred") Traceback (most recent call last):… __main__.CustomError: An error occurred

Itt létrehoztunk egy felhasználó által definiált kivételt, CustomErroramely örököl az Exceptionosztálytól. Ez az új kivétel, a többi kivételhez hasonlóan, raiseopcionális hibaüzenettel rendelkező utasítás segítségével emelhető fel .

Amikor egy nagy Python programot fejlesztünk, célszerű minden, a program által felvetett, felhasználó által definiált kivételt külön fájlba helyezni. Sok standard modul teszi ezt. Kivételeiket külön exceptions.pyvagy errors.py(általában, de nem mindig) külön definiálják .

A felhasználó által definiált kivétel osztály képes megvalósítani mindazt, amit egy normális osztály megtehet, de mi általában egyszerűvé és tömöré tesszük őket. A legtöbb megvalósítás egyéni alaposztályt deklarál, és más kivételosztályokat vezet le ebből az alaposztályból. Ezt a koncepciót a következő példa világosabbá teszi.

Példa: Felhasználó által definiált kivétel a Pythonban

Ebben a példában bemutatjuk, hogyan lehet a felhasználó által definiált kivételeket felhasználni egy programban a hibák felvetésére és elkapására.

Ez a program addig kéri a felhasználót, hogy adjon meg egy számot, amíg a kitalált számot helyesen kitalálja. Annak érdekében, hogy kitalálják őket, adunk egy tippet, hogy kitalálásuk nagyobb vagy kevesebb, mint a tárolt szám.

 # define Python user-defined exceptions class Error(Exception): """Base class for other exceptions""" pass class ValueTooSmallError(Error): """Raised when the input value is too small""" pass class ValueTooLargeError(Error): """Raised when the input value is too large""" pass # you need to guess this number number = 10 # user guesses a number until he/she gets it right while True: try: i_num = int(input("Enter a number: ")) if i_num number: raise ValueTooLargeError break except ValueTooSmallError: print("This value is too small, try again!") print() except ValueTooLargeError: print("This value is too large, try again!") print() print("Congratulations! You guessed it correctly.")

Itt van egy példa a program futtatására.

Írjon be egy számot: 12 Ez az érték túl nagy, próbálja újra! Írjon be egy számot: 0 Ez az érték túl kicsi, próbálja újra! Írjon be egy számot: 8 Ez az érték túl kicsi, próbálja újra! Írjon be egy számot: 10 Gratulálunk! Helyesen tippelted.

Meghatároztuk az úgynevezett alaposztályt Error.

A programunk által felvetett másik két kivétel ( ValueTooSmallErrorés ValueTooLargeError) ebből az osztályból származik. Ez a szokásos módszer a felhasználó által definiált kivételek definiálására a Python programozásban, de nem korlátozódik erre.

A kivételosztályok testreszabása

Tovább testreszabhatjuk ezt az osztályt, hogy más érveket elfogadhassunk igényeink szerint.

A Kivétel osztályok testreszabásához meg kell ismernie az objektumorientált programozás alapismereteit.

Látogasson el a Python objektumorientált programozásra, hogy megismerje az objektumorientált programozást a Pythonban.

Nézzünk meg egy példát:

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Kimenet

 Adja meg a fizetés összegét: 2000 Traceback (a legutóbbi hívás utoljára): "" fájl, 17. sor, emelésben.

Itt felülbíráltuk az Exceptionosztály konstruktorát, hogy elfogadjuk saját egyéni argumentumainkat salaryés message. Ezután a szülő Exceptionosztály konstruktorát manuálisan hívjuk meg a self.messageargumentummal super().

Az egyedi self.salaryattribútum későbbi felhasználásra van meghatározva.

Ezután __str__az Exceptionosztály öröklött metódusát használjuk a megfelelő üzenet megjelenítéséhez, amikor fel SalaryNotInRangeErrorvan emelve.

__str__Magát a módszert testreszabhatjuk felülírással is.

 class SalaryNotInRangeError(Exception): """Exception raised for errors in the input salary. Attributes: salary -- input salary which caused the error message -- explanation of the error """ def __init__(self, salary, message="Salary is not in (5000, 15000) range"): self.salary = salary self.message = message super().__init__(self.message) def __str__(self): return f'(self.salary) -> (self.message)' salary = int(input("Enter salary amount: ")) if not 5000 < salary < 15000: raise SalaryNotInRangeError(salary)

Kimenet

 Adja meg a fizetés összegét: 2000 Traceback (a legutóbbi hívás utoljára): A "/home/bsoyuj/Desktop/Untitled-1.py" fájl 20. sora az emelésben SalaryNotInRangeError (fizetés) __main __. SalaryNotInRangeError: 2000 -> A fizetés nincs benne ( 5000, 15000) tartományban

Ha többet szeretne megtudni arról, hogy miként kezelheti a kivételeket a Pythonban, keresse fel a Python kivételkezelést.

érdekes cikkek...