Hoe aangepaste uitzonderingen in Python te definiëren? (Met voorbeelden)

In deze zelfstudie leert u met behulp van voorbeelden hoe u aangepaste uitzonderingen kunt definiëren, afhankelijk van uw vereisten.

Python heeft talloze ingebouwde uitzonderingen die je programma dwingen een foutmelding te geven als er iets in het programma fout gaat.

Soms moet u echter uw eigen aangepaste uitzonderingen maken die aan uw doel dienen.

Aangepaste uitzonderingen maken

In Python kunnen gebruikers aangepaste uitzonderingen definiëren door een nieuwe klasse te maken. Deze uitzonderingsklasse moet, direct of indirect, worden afgeleid van de ingebouwde Exceptionklasse. De meeste ingebouwde uitzonderingen zijn ook afgeleid van deze klasse.

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

Hier hebben we een door de gebruiker gedefinieerde uitzondering gemaakt met de naam CustomErrordie erft van de Exceptionklasse. Deze nieuwe uitzondering kan, net als andere uitzonderingen, worden opgeworpen met behulp van de raiseinstructie met een optioneel foutbericht.

Wanneer we een groot Python-programma ontwikkelen, is het een goede gewoonte om alle door de gebruiker gedefinieerde uitzonderingen die ons programma oproept in een apart bestand te plaatsen. Veel standaardmodules doen dit. Ze definiëren hun uitzonderingen afzonderlijk als exceptions.pyof errors.py(in het algemeen maar niet altijd).

Door de gebruiker gedefinieerde uitzonderingsklassen kunnen alles implementeren wat een normale klasse kan, maar we maken ze over het algemeen eenvoudig en beknopt. De meeste implementaties declareren een aangepaste basisklasse en leiden andere uitzonderingsklassen af ​​van deze basisklasse. Dit concept wordt duidelijker gemaakt in het volgende voorbeeld.

Voorbeeld: door de gebruiker gedefinieerde uitzondering in Python

In dit voorbeeld laten we zien hoe door de gebruiker gedefinieerde uitzonderingen in een programma kunnen worden gebruikt om fouten op te sporen en op te sporen.

Dit programma zal de gebruiker vragen om een ​​nummer in te voeren totdat ze een opgeslagen nummer correct raden. Om ze te helpen erachter te komen, wordt een hint gegeven of hun gok groter of kleiner is dan het opgeslagen getal.

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

Hier is een voorbeeld van een run van dit programma.

Voer een getal in: 12 Deze waarde is te hoog, probeer het opnieuw! Voer een getal in: 0 Deze waarde is te klein, probeer het opnieuw! Voer een getal in: 8 Deze waarde is te klein, probeer het opnieuw! Voer een getal in: 10 Gefeliciteerd! Je raadt het goed.

We hebben een basisklasse gedefinieerd met de naam Error.

De andere twee uitzonderingen ( ValueTooSmallErroren ValueTooLargeError) die feitelijk door ons programma worden opgeworpen, zijn afgeleid van deze klasse. Dit is de standaardmanier om door de gebruiker gedefinieerde uitzonderingen in Python-programmering te definiëren, maar u bent niet alleen op deze manier beperkt.

Uitzonderingsklassen aanpassen

We kunnen deze klasse verder aanpassen om andere argumenten te accepteren volgens onze behoeften.

Om te leren over het aanpassen van de Exception-klassen, moet u de basiskennis van Objectgeoriënteerd programmeren hebben.

Bezoek Python Object Oriented Programming om te leren over Object-Oriented Programming in Python.

Laten we naar een voorbeeld kijken:

 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)

Uitvoer

 Voer het salarisbedrag in: 2000 Traceback (meest recente oproep laatste): Bestand "", regel 17, in loonsverhoging SalaryNotInRangeError (salaris) __main __. SalaryNotInRangeError: Salaris valt niet binnen het bereik van (5000, 15000)

Hier hebben we de constructor van de Exceptionklasse overschreven om onze eigen aangepaste argumenten te accepteren salaryen message. Vervolgens wordt de constructor van de bovenliggende Exceptionklasse handmatig aangeroepen met het self.messageargument met super().

Het aangepaste self.salarykenmerk is gedefinieerd om later te worden gebruikt.

De overgeërfde __str__methode van de Exceptionklasse wordt vervolgens gebruikt om het corresponderende bericht weer te geven wanneer SalaryNotInRangeErrorwordt opgeworpen.

We kunnen de __str__methode zelf ook aanpassen door deze te overschrijven.

 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)

Uitvoer

 Voer het salarisbedrag in: 2000 Traceback (meest recente oproep laatste): Bestand "/home/bsoyuj/Desktop/Untitled-1.py", regel 20, in salaris verhogen SalaryNotInRangeError (salaris) __main __. SalaryNotInRangeError: 2000 -> Salaris is niet in ( 5000, 15000) bereik

Ga naar Python Exception Handling voor meer informatie over het omgaan met uitzonderingen in Python.

Interessante artikelen...