Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

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

  1. Python-Datentypen
  2. Python-Operatoren
  3. Python-pass-Anweisung
  4. Python-Funktionsargumente
  5. Python-Wörterbuch
  6. Python-Fehler und eingebaute Ausnahmen
  7. Python objektorientierte Programmierung
  8. Python-Vererbung
  9. Python-Iteratoren
  10. type() und isinstance() in Python mit Beispielen