Benutzerdefinierte Python-Ausnahmen
Benutzerdefinierte Python-Ausnahmen
In diesem Tutorial erfahren Sie anhand von Beispielen, wie Sie benutzerdefinierte Ausnahmen entsprechend Ihren Anforderungen definieren.
Python hat zahlreiche eingebaute Ausnahmen, die Ihr Programm zwingen, einen Fehler auszugeben, wenn etwas im Programm schief geht.
Manchmal müssen Sie jedoch möglicherweise Ihre eigenen benutzerdefinierten Ausnahmen erstellen, die Ihrem Zweck dienen.
Benutzerdefinierte Ausnahmen erstellen
In Python können Benutzer benutzerdefinierte Ausnahmen definieren, indem sie eine neue Klasse erstellen. Diese Ausnahmeklasse muss direkt oder indirekt vom eingebauten Exception
abgeleitet werden Klasse. Die meisten eingebauten Ausnahmen werden ebenfalls von dieser Klasse abgeleitet.
>>> 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 haben wir eine benutzerdefinierte Ausnahme namens CustomError
erstellt die von Exception
erbt Klasse. Diese neue Ausnahme kann wie andere Ausnahmen mit raise
ausgelöst werden Anweisung mit einer optionalen Fehlermeldung.
Wenn wir ein großes Python-Programm entwickeln, empfiehlt es sich, alle benutzerdefinierten Ausnahmen, die unser Programm auslöst, in einer separaten Datei abzulegen. Viele Standardmodule tun dies. Sie definieren ihre Ausnahmen separat als exceptions.py
oder errors.py
(allgemein, aber nicht immer).
Benutzerdefinierte Ausnahmeklassen können alles implementieren, was eine normale Klasse kann, aber wir machen sie im Allgemeinen einfach und prägnant. Die meisten Implementierungen deklarieren eine benutzerdefinierte Basisklasse und leiten andere Ausnahmeklassen von dieser Basisklasse ab. Dieses Konzept wird im folgenden Beispiel deutlicher.
Beispiel:Benutzerdefinierte Ausnahme in Python
In diesem Beispiel veranschaulichen wir, wie benutzerdefinierte Ausnahmen in einem Programm verwendet werden können, um Fehler auszulösen und abzufangen.
Dieses Programm fordert den Benutzer auf, eine Zahl einzugeben, bis er eine gespeicherte Zahl richtig errät. Um ihnen bei der Bestimmung zu helfen, wird ein Hinweis bereitgestellt, ob ihre Vermutung größer oder kleiner als die gespeicherte Zahl ist.
# 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 ValueTooSmallError
elif 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 ist ein Beispiellauf dieses Programms.
Enter a number: 12 This value is too large, try again! Enter a number: 0 This value is too small, try again! Enter a number: 8 This value is too small, try again! Enter a number: 10 Congratulations! You guessed it correctly.
Wir haben eine Basisklasse namens Error
definiert .
Die anderen beiden Ausnahmen (ValueTooSmallError
und ValueTooLargeError
), die tatsächlich von unserem Programm ausgelöst werden, sind von dieser Klasse abgeleitet. Dies ist der Standardweg, um benutzerdefinierte Ausnahmen in der Python-Programmierung zu definieren, aber Sie sind nicht nur auf diesen Weg beschränkt.
Ausnahmeklassen anpassen
Wir können diese Klasse weiter anpassen, um andere Argumente gemäß unseren Anforderungen zu akzeptieren.
Um mehr über das Anpassen der Exception-Klassen zu erfahren, müssen Sie über Grundkenntnisse der objektorientierten Programmierung verfügen.
Besuchen Sie die objektorientierte Programmierung in Python, um sich mit der objektorientierten Programmierung in Python vertraut zu machen.
Sehen wir uns ein Beispiel an:
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)
Ausgabe
Enter salary amount: 2000 Traceback (most recent call last): File "<string>", line 17, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: Salary is not in (5000, 15000) range
Hier haben wir den Konstruktor von Exception
überschrieben Klasse, um unsere eigenen benutzerdefinierten Argumente zu akzeptieren salary
und message
. Dann der Konstruktor des übergeordneten Exception
Klasse wird manuell mit dem self.message
aufgerufen Argument mit super()
.
Der benutzerdefinierte self.salary
Attribut ist definiert, um später verwendet zu werden.
Der geerbte __str__
Methode des Exception
Klasse wird dann verwendet, um die entsprechende Meldung anzuzeigen, wenn SalaryNotInRangeError
wird ausgelöst.
Wir können den __str__
auch anpassen Methode selbst durch Überschreiben.
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)
Ausgabe
Enter salary amount: 2000 Traceback (most recent call last): File "/home/bsoyuj/Desktop/Untitled-1.py", line 20, in <module> raise SalaryNotInRangeError(salary) __main__.SalaryNotInRangeError: 2000 -> Salary is not in (5000, 15000) range
Um mehr darüber zu erfahren, wie Sie Ausnahmen in Python handhaben können, besuchen Sie Python Exception Handling.
Python