Hvordan definere egendefinerte unntak i Python? (Med eksempler)

I denne opplæringen lærer du hvordan du definerer tilpassede unntak avhengig av dine behov ved hjelp av eksempler.

Python har mange innebygde unntak som tvinger programmet til å sende en feil når noe i programmet går galt.

Noen ganger må du imidlertid kanskje lage dine egne tilpassede unntak som tjener formålet ditt.

Opprette egendefinerte unntak

I Python kan brukere definere tilpassede unntak ved å opprette en ny klasse. Denne unntaksklassen må avledes, direkte eller indirekte, fra den innebygde Exceptionklassen. De fleste av de innebygde unntakene kommer også fra denne klassen.

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

Her har vi opprettet et brukerdefinert unntak kalt CustomErrorsom arver fra Exceptionklassen. Dette nye unntaket, som andre unntak, kan heves ved å bruke raiseuttalelsen med en valgfri feilmelding.

Når vi utvikler et stort Python-program, er det en god praksis å plassere alle brukerdefinerte unntak som vårt program reiser i en egen fil. Mange standardmoduler gjør dette. De definerer unntakene sine separat som exceptions.pyeller errors.py(generelt, men ikke alltid).

Brukerdefinert unntaksklasse kan implementere alt en normal klasse kan gjøre, men vi gjør dem generelt enkle og konsise. De fleste implementeringer erklærer en tilpasset basisklasse og henter andre unntaksklasser fra denne basisklassen. Dette konseptet blir tydeliggjort i følgende eksempel.

Eksempel: Brukerdefinert unntak i Python

I dette eksemplet vil vi illustrere hvordan brukerdefinerte unntak kan brukes i et program for å heve og fange feil.

Dette programmet vil be brukeren om å oppgi et nummer til de gjetter et lagret nummer riktig. For å hjelpe dem med å finne ut av det, får du et hint om gjetningen deres er større enn eller mindre enn det lagrede nummeret.

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

Her er en prøvekjøring av dette programmet.

Skriv inn et tall: 12 Denne verdien er for stor, prøv igjen! Skriv inn et tall: 0 Denne verdien er for liten, prøv igjen! Skriv inn et tall: 8 Denne verdien er for liten, prøv igjen! Skriv inn et tall: 10 Gratulerer! Du gjettet riktig.

Vi har definert en basisklasse kalt Error.

De to andre unntakene ( ValueTooSmallErrorog ValueTooLargeError) som faktisk blir reist av programmet vårt, er hentet fra denne klassen. Dette er den vanlige måten å definere brukerdefinerte unntak i Python-programmering, men du er ikke begrenset til bare denne måten.

Tilpasse unntaksklasser

Vi kan videre tilpasse denne klassen til å godta andre argumenter i henhold til våre behov.

For å lære om å tilpasse Exception-klassene, må du ha grunnleggende kunnskap om objektorientert programmering.

Besøk Python Object Oriented Programming for å begynne å lære om Object-Oriented programmering i Python.

La oss se på ett eksempel:

 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)

Produksjon

 Angi lønnsbeløp: 2000 Traceback (siste samtale sist): Fil "", linje 17, i lønning SalaryNotInRangeError (lønn) __main __. SalaryNotInRangeError: Lønn er ikke i (5000, 15000) område

Her har vi overstyrt konstruktøren av Exceptionklassen til å godta våre egne tilpassede argumenter salaryog message. Deretter Exceptionkalles konstruktøren til foreldreklassen manuelt med self.messageargumentet ved hjelp av super().

Det egendefinerte self.salaryattributtet er definert for å bli brukt senere.

Den arvede __str__metoden i Exceptionklassen brukes deretter til å vise den tilsvarende meldingen når den SalaryNotInRangeErrorblir hevet.

Vi kan også tilpasse selve __str__metoden ved å overstyre den.

 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)

Produksjon

 Angi lønnsbeløp: 2000 Traceback (siste ringe sist): Fil "/home/bsoyuj/Desktop/Untitled-1.py", linje 20, i lønning SalaryNotInRangeError (lønn) __main __. SalaryNotInRangeError: 2000 -> Lønn er ikke i ( 5000, 15000) rekkevidde

For å lære mer om hvordan du kan håndtere unntak i Python, besøk Python Exception Handling.

Interessante artikler...