Kuidas defineerida Pythonis kohandatud erandeid? (Näidetega)

Selles õpetuses saate õppida näidete abil määratlema kohandatud erandeid vastavalt teie vajadustele.

Pythonis on arvukalt sisseehitatud erandeid, mis sunnivad teie programmi vea väljastama, kui programmis midagi valesti läheb.

Mõnikord peate võib-olla siiski looma oma kohandatud erandid, mis teie eesmärki täidavad.

Kohandatud erandite loomine

Pythonis saavad kasutajad uue klassi loomisega määratleda kohandatud erandeid. See erandklass tuleb tuletada kas otseselt või kaudselt sisseehitatud Exceptionklassist. Ka enamik sisseehitatud erandeid tuletatakse sellest klassist.

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

Siin oleme loonud kasutaja määratletud erandi, CustomErrormis pärineb klassilt Exception. Selle uue erandi, nagu ka teiste erandite, saab tõsta raisevalikulise tõrketeatega avalduse abil.

Suure Pythoni programmi väljatöötamisel on hea tava paigutada kõik kasutaja määratletud erandid eraldi faili. Paljud standardmoodulid teevad seda. Nad määratlevad nende erandite eraldi exceptions.pyvõi errors.py(tavaliselt, kuid mitte alati).

Kasutaja määratletud erandklassi abil saab rakendada kõike, mida tavaline klass teha saab, kuid üldjuhul muudame need lihtsaks ja lühikeseks. Enamik rakendusi deklareerib kohandatud baasklassi ja tuletab sellest baasklassist ka teisi erandklasse. See mõiste on selgem järgmises näites.

Näide: kasutaja määratletud erand Pythonis

Selles näites illustreerime, kuidas kasutaja määratletud erandeid saab programmis vigade tekitamiseks ja tabamiseks kasutada.

See programm palub kasutajal sisestada numbri, kuni ta arvab salvestatud numbri õigesti. Selle välja selgitamiseks antakse vihje, kas nende arvamus on suurem või väiksem kui salvestatud number.

 # 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.")

Siin on selle programmi näidisjooks.

Sisestage arv: 12 See väärtus on liiga suur, proovige uuesti! Sisestage arv: 0 See väärtus on liiga väike, proovige uuesti! Sisestage number: 8 See väärtus on liiga väike, proovige uuesti! Sisestage number: 10 Palju õnne! Sa arvasid seda õigesti.

Oleme määranud baasklassi nimega Error.

Kaks ülejäänud erandit ( ValueTooSmallErrorja ValueTooLargeError), mille meie programm tegelikult tõstatab, tulenevad sellest klassist. See on tavaline viis kasutaja määratletud erandite määratlemiseks Pythoni programmeerimisel, kuid te ei piirdu ainult selle viisiga.

Erandklasside kohandamine

Saame seda klassi veelgi kohandada, et aktsepteerida muid argumente vastavalt meie vajadustele.

Erandklasside kohandamise kohta lisateabe saamiseks peate omama põhiteadmisi objektile orienteeritud programmeerimisest.

Objektipõhise programmeerimise õppimise alustamiseks Pythonis külastage Pythoni objektiorienteeritud programmeerimist.

Vaatame ühte näidet:

 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)

Väljund

 Sisestage palgasumma: 2000 Traceback (viimane kõne viimati): fail "", rida 17, tõstes PalaryNotInRangeError (palk) __main __. SalaryNotInRangeError: Palk ei ole vahemikus (5000, 15000)

Siin oleme Exceptionklassi konstruktori tühistanud, et aktsepteerida meie enda kohandatud argumente salaryja message. Seejärel Exceptionkutsutakse vanemklassi konstruktor käsitsi, self.messagekasutades argumenti super().

Kohandatud self.salaryatribuut on määratletud kasutamiseks hiljem.

Seejärel kasutatakse klassi päritud __str__meetodit Exceptionvastava teate kuvamiseks, kui see SalaryNotInRangeErroron tõstetud.

Samuti võime __str__meetodit ennast kohandada , ületades selle.

 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)

Väljund

 Sisestage palgasumma: 2000 Traceback (viimane kõne viimati): fail "/home/bsoyuj/Desktop/Untitled-1.py", rida 20, tõstes PalaryNotInRangeError (palk) __main __. SalaryNotInRangeError: 2000 -> Palk pole ( 5000, 15000)

Lisateabe saamiseks selle kohta, kuidas saate Pythonis erandeid käsitleda, külastage Pythoni erandite käitlemist.

Huvitavad Artiklid...