Erstellen Sie benutzerdefinierte Ausnahmen in Python

Rayven Esplanada 10 Oktober 2023
  1. Erstellen Sie eine benutzerdefinierte Ausnahmeklasse in Python
  2. Exception-Handling mit dem try...except-Block in Python ausführen
Erstellen Sie benutzerdefinierte Ausnahmen in Python

In diesem Tutorial wird gezeigt, wie Sie benutzerdefinierte Ausnahmeklassen in Python erstellen können. Hier zeigen wir, wie Sie die Ausnahmebehandlung richtig durchführen, benutzerdefinierte Ausnahmeklassen definieren und vorhandene integrierte Ausnahmen überschreiben.

Ausnahmen sind eine Art von Ereignis, das immer dann auftritt, wenn etwas innerhalb eines Programms nicht wie beabsichtigt verläuft oder den Ablauf des beabsichtigten Anwendungsfalls des Programms stört. Ohne Ausnahmebehandlung wird die Ausführung des Programms vollständig eingestellt, und die Ausnahme müsste entweder behoben oder behandelt werden.

Erstellen Sie eine benutzerdefinierte Ausnahmeklasse in Python

Das Erstellen einer Ausnahmeklasse in Python erfolgt auf die gleiche Weise wie bei einer regulären Klasse. Der Hauptunterschied besteht darin, dass Sie die Python-Basisklasse Exception einschließen müssen, um den Compiler darüber zu informieren, dass die Klasse, die Sie erstellen, eine Ausnahmeklasse ist.

Lassen Sie uns diese Methode testen, um eine Ausnahmeklasse namens DemoException zu erstellen und das Platzhalter-Kontrollfluss-Schlüsselwort pass als Platzhalter zu verwenden.

class DemoException(Exception):
    pass

Ausführen von Ausnahmen mit dem Schlüsselwort raise in Python

Um die Klasse DemoException zu testen und zu sehen, was sie anzeigt, wenn sie tatsächlich ausgelöst wird, führen Sie eine Ausnahme aus. Ausnahme-Auslösung ist in anderen Programmiersprachen gleichbedeutend mit Ausnahme-Auslösen.

Lösen Sie mit dem Schlüsselwort raise eine Ausnahme mit der angegebenen Ausnahmeklasse aus und geben Sie eine Ausnahmemeldung aus.

class DemoException(Exception):
    pass


raise DemoException

Ausgabe:

Traceback (most recent call last):
  File "/Users/demo/python/demo_exception.py", line 4, in <module>
    raise DemoException
__main__.DemoException

Eine Standardausnahme sieht im Terminal aus, wenn keine benutzerdefinierte Ausnahmemeldung deklariert wurde.

Deklarieren einer benutzerdefinierten Ausnahmemeldung in Python

Um eine benutzerdefinierte Ausnahmemeldung für DemoException zu deklarieren, überschreiben Sie die Methode __init__() der Ausnahmeklasse und fügen die Meldung, die für die Ausnahme ausgegeben werden soll, in die Parameter ein, zusammen mit dem obligatorischen selbstreferenziellen Parameter self.

Lassen Sie uns zum Beispiel die Methode __init__() überschreiben und eine benutzerdefinierte Nachricht für die Klasse DemoException erstellen:

class DemoException(Exception):
    def __init__(self, message):
        super().__init__(message)

Beachten Sie, dass Sie für eine erfolgreiche Integration der Nachricht in Ihre Ausnahme die Basisklasse Exception, die Methode __init__() aufrufen und die message als Argument einbinden.

Rufen wir die Ausnahmeklasse erneut mit dem Schlüsselwort raise auf und übergeben nun eine benutzerdefinierte Nachricht damit:

class DemoException(Exception):
    def __init__(self, message):
        super().__init__(message)


message = "Exception Triggered! Something went wrong."
raise DemoException(message)

Die Ausgabe sollte so aussehen:

Traceback (most recent call last):
  File "/Users/demo/python/helloworld.py", line 6, in <module>
    raise DemoException(message)
__main__.DemoException: Exception Triggered! Something went wrong.

Wir haben jetzt erfolgreich eine Ausnahmeklasse mit einer benutzerdefinierten Fehlermeldung erstellt und ausgelöst.

Wie behandeln und lösen wir diese Ausnahmen in tatsächlichen Situationen aus, die eine Ausnahme auslösen können? Sie können dieses Problem sauber lösen, indem Sie eine Ausnahmebehandlung mit dem Block try...except implementieren.

Exception-Handling mit dem try...except-Block in Python ausführen

Der try...except-Block ist dem try-catch-Block in anderen Sprachen wie Java sehr ähnlich.

Der try...except-Block besteht aus 2 Hauptblöcken und 2 optionalen Blöcken:

  • try (erforderlich) - Der Hauptblock, der für die Kapselung des Codeblocks verantwortlich ist, in dem die Ausnahme ausgelöst werden könnte. Der try-Block hält den gesamten Prozess darin an, wenn eine Ausnahme ausgelöst wird.
  • except (erforderlich) - Das Blockprogramm wird immer dann fortgesetzt, wenn eine angegebene Ausnahme ausgelöst wird. Dieser Block enthält typischerweise eine beschreibende Fehlermeldung für den Aufrufer oder nur eine einfache print()-Anweisung. Es kann mehr als einen except-Block in einem einzigen try-Block geben, wobei jeder unterschiedliche Ausnahmen abfängt.
  • else (optional) - In diesem optionalen Block wird das Programm fortfahren, wenn der try-Block keine Ausnahmen ausgelöst hat.
  • finally (optional) - Dieser optionale Block wird ausgeführt, sobald alles aus den vorherigen 3 Blöcken ausgeführt wurde, unabhängig davon, ob eine Ausnahme ausgelöst wird oder nicht.

Lassen Sie uns das vorherige Beispiel mit der Klasse DemoException verwenden, um einen einfachen try...except-Block auszuprobieren.

Wickeln Sie zuerst das Schlüsselwort raise in eine Funktion ein und fügen Sie es in den try...except-Block.

Die Funktion, die wir für dieses Beispiel erstellen, ist eine Funktion, die eine Zahl akzeptiert und eine Ausnahme auslöst, wenn sie 0 sendet. Wenn es eine andere Nummer sendet, wird der Code wie vorgesehen fortgesetzt. Überprüfen Sie das folgende Beispiel:

class DemoException(Exception):
    def __init__(self, message):
        super().__init__(message)


message = "Exception Triggered! Something went wrong."


def triggerException(num):
    if num == 0:
        raise DemoException(message)
    else:
        print(num)


try:
    triggerException(0)
    print("Code has successfully been executed.")
except DemoException:
    print("Error: Number should not be 0.")

Da die triggerException() 0 als Argument übergeben hat, sollte der Code DemoException auslösen. Hier sollten wir erwarten, dass die Schlüsselwortnachricht raise mit dem überschrieben wird, was sich als Ausgabe im except-Block befindet.

Beachten Sie, dass die Zeile print() nach dem Funktionsaufruf triggerException() nicht ausgegeben wurde. Dies liegt daran, dass die Funktion eine Ausnahme ausgelöst hat. deshalb hat es sofort alle Prozesse innerhalb des try-Blocks angehalten und direkt zum except-Block übergegangen.

Ausgabe:

Error: Number should not be 0.

Versuchen wir nun, eine gültige Zahl wie zum Beispiel 20 zu übergeben.

try:
    triggerException(20)
    print("Code has successfully been executed.")
except DemoException:
    print("Error: Number should not be 0.")

Ausgabe:

20
Code has successfully been executed.

Versuchen wir, die except-Blöcke zu verketten und eine weitere Ausnahme zu erstellen. Nennen wir die neue Ausnahme NumberFormatException, die ausgelöst wird, wenn die angegebene Eingabe keine Zahl ist. Für diese Ausnahmeklasse deklarieren wir die Nachricht innerhalb der Klasse.

class NumberFormatException(Exception, value):
    message = f"{value} is not a number"

    def __init__(self):
        super().__init__(message)

Ändern Sie nun den obigen Code, um die neue Ausnahmeklasse NumberFormatException zu behandeln:

class DemoException(Exception):
    def __init__(self, message):
        super().__init__(message)


class NumberFormatException(Exception):
    def __init__(self, message, value):
        message = f"{value} is not a number"
        super().__init__(message)


message = "Exception occured."


def triggerException(num):
    if not num.isdigit():
        raise NumberFormatException(message, num)
    elif num == 0:
        raise DemoException(message)
    else:
        print(num)


num = "sample string"
try:
    triggerException(num)
    print("Code has successfully been executed.")
except DemoException:
    print("Error: Number should not be 0.")
except NumberFormatException:
    print(num + " is not a number.")

In diesem Code ist der Wert von num, der an triggerException() übergeben wurde, ein String 'sample string', also sollte die NumberFormatException ausgelöst werden.

Ausgabe:

sample string is not a number.

Zusammenfassend lässt sich sagen, dass das Erstellen von benutzerdefinierten Ausnahmen in Python so einfach ist wie das Erstellen einer neuen Klasse, jedoch mit der Klasse Exception als zusätzliches Argument in der Klassendefinition. Das Schlüsselwort raise wird verwendet, um bei gegebener Ausnahmeklasse Ausnahmen auszulösen. Die try...except-Blöcke werden verwendet, um eine oder mehrere Ausnahmen in einen Codeblock einzuschließen und zu ändern, was der Code bei der Behandlung dieser Ausnahme tut und nicht nur das Programm vollständig herunterfährt.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Verwandter Artikel - Python Exception