Umgang mit Ausnahmen in Python Handle

Die Ausnahmebehandlung ist Ihre Fähigkeit, Fehlermeldungen für Teile Ihres Programms, die nicht funktionieren, anzupassen und anzuzeigen.

Egal, ob Sie eine Website erstellen, eine API, ein Modul oder ein anderes Produkt mit Python erstellen, Ihre Fähigkeit, Ausnahmen effektiv zu behandeln, ermöglicht es Ihnen, die Ursache eines Fehlers explizit anzugeben.

Hier sehen wir uns an, wie Sie mit Ausnahmen in Python umgehen können.

So funktioniert die Ausnahmebehandlung in Python

Wenn Sie Ausnahmen auslösen, weisen Sie Python an, eine Nachricht anzuzeigen, wenn ein Codeblock fehlschlägt. Der Umgang mit Ausnahmen ist, als würde man jemandem sagen, er solle versuchen, ein Gewicht zu heben. Und wenn sie es nicht können, sollten sie es Sie wissen lassen.

Um eine Ausnahme in Python auszulösen, weisen Sie Python jedoch an, zu versuchen, einen bestimmten Codeblock auszuführen. Wenn dieser Block fehlschlägt, können Sie Python bitten, eine definierte Ausnahme für den fehlgeschlagenen Code auszulösen.

Wann sollten Sie Ausnahmen in der Python-Programmierung verwenden?

In den meisten Fällen können Sie Standard-Python-Fehler mit Ausnahmen maskieren. Sie müssen jedoch wachsam bleiben, da dies zu Debugging-Problemen führen kann. Folglich fällt es Ihnen möglicherweise schwer, die Ursache eines eventuellen Fehlers herauszufinden.

Daher sollten Sie Ausnahmen verwenden, wenn Sie Ihren Code ausreichend getestet haben und sicher sind, dass er funktioniert. Letztendlich ist es am besten, sie zu verwenden, um potenzielle Fehler zu behandeln, die von der Benutzerseite und nicht vom Code selbst herrühren können.

Mit anderen Worten, Sie können Ausnahmen als Warntool verwenden, um Benutzer bei der Verwendung Ihres Programms zu unterstützen.

Umgang mit Python-Ausnahmen

Um Ausnahmen in Python zu behandeln, müssen Sie Ihren Code zuerst in einen try…except- Block einschließen. Gelegentlich müssen Sie je nach Bedarf möglicherweise eine final- Anweisung einfügen, um weitere Aktionen auszuführen.

Das Codierungskonzept von Python-Ausnahmen sieht im Allgemeinen so aus:

 try:
"code to be executed"
except:
"error message"

Wie bereits erwähnt, können Sie auch endlich in einem Ausnahmeblock verwenden. Aber der Code, den Sie in eine finally- Klausel schreiben, ist unabhängig und wird ausgeführt, unabhängig davon, ob eine Ausnahme vorliegt oder nicht.

Im Wesentlichen ist es praktisch, wenn Sie einen anderen Codeblock haben, den Sie kontinuierlich ausführen möchten, unabhängig davon, was innerhalb des try…außer- Blocks passiert.

Hier ist ein Beispiel:

 try:
print(9+6)
except:
print("error message")
finally:
print("please restart")
Output:
15
please restart

Im obigen Code starten Sie die Ausführung bitte kontinuierlich neu, unabhängig davon, ob eine Ausnahme vorliegt oder nicht.

Eine else- Bedingung kann auch auf eine Exception- Anweisung folgen:

 try:
C = 2 + B
except:
print("B needs to be defined")
else:
print(u"Added successfully! The result is %s"%(C))
Output: B needs to be defined

Versuchen Sie es jetzt noch einmal mit definiertem "B":

 try:
B = 5
C = 2 + B
except:
print("B needs to be defined")
else:
print(u"Added successfully! The result is %s"%(C))
Output: Added successfully! The result is 7

Die obigen Beispiele sind nicht standardisierte Ausnahmen. Sie können jedoch eine explizitere Ausnahme haben, wenn Sie integrierte (definierte) Ausnahmen mit nicht standardisierten kombinieren:

 try:
C = 2 + B
except NameError as err:
print(err, ":", "B needs to be defined, please")
else:
print(u"Added successfully! The result is %s"%(C))
Output: name 'B' is not defined : B needs to be defined, please

Die obige Ausnahme prüft zuerst, ob ein NameError im try- Block vorhanden ist. Es druckt dann zuerst die standardmäßige NameError- Ausnahme ("Name 'B' ist nicht definiert"). Und unterstützt es mit Ihrer schriftlichen Ausnahme ("B muss definiert werden, bitte").

Verwandte: Grundlegende Programmierprinzipien, die jeder Programmierer kennen muss

Und wenn Sie eine Kette von Ausnahmen behandeln möchten, können Sie einen try- Block auch mit vielen else- Anweisungen begleiten. Dies ist ziemlich praktisch, wenn Ihr try- Block das Potenzial hat, viele Ausnahmen zu haben:

 try:
B = 5
C = 2 + B
D = float(6)
F = 7/0
except NameError as err:
print(err,":", "B needs to be defined, please")
except ValueError as val:
print(val,":", "You can't convert that data")
except ZeroDivisionError as zeroerr:
print(zeroerr,":", "You can't divide a number by zero")
else:
print(u"Operation successfull! The results are: %s, %s, and %s"%(C, D, F))
Output: division by zero : You can't divide a number by zero

Was ist, wenn die Aufteilung gültig ist? Wenn Sie beispielsweise F = 7/0 im obigen Code durch F = 7/5 ersetzen, erhalten Sie:

 Output: Operation successfull! The results are: 7, 6.0, and 1.4

Benutzerdefinierte Ausnahmen in Python

Sie können sich auch Ihre Ausnahme ausdenken und sie später in Ihrem Programm aufrufen. Auf diese Weise können Sie Ihre Ausnahme konkret beschreiben und nach Belieben benennen.

Trotzdem stammt jede benutzerdefinierte Ausnahme (direkt oder indirekt) immer noch aus der integrierten Exception- Klasse von Python.

Der Beispielcode unten bezieht sich auf die Basis Exception direkt von Runtime von ihr Aufruf:

 class connectionError(RuntimeError):
def __init__(self, value):
self.value = value
try:
raise connectionError("Bad hostname")
except connectionError as err:
print(err.value)
Output: Bad hostname

Beachten Sie, dass connectionError in diesem Fall eine benutzerdefinierte Klasse ist, die Sie jederzeit auslösen können, wenn Sie sie in Ihrem Programm benötigen.

Verwandte: Der Anfängerleitfaden zu regulären Ausdrücken mit Python

Sie können eine benutzerdefinierte Ausnahme erstellen, indem Sie sie direkt von der Exception- Basisklasse ableiten. Die folgende Ausnahme verhindert jedoch die Subtraktion von 5 von 6 und ruft die Ausnahme direkt aus der Basisklasse auf:

 class errors(Exception):
pass
class sixFiveError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
try:
raise sixFiveError(6-5,"This substraction is not allowed")
except sixFiveError as e:
print("There was an error:", e.message)
Output: There was an error: This substraction is not allowed

In der Praxis können Sie eine zuvor definierte Ausnahme verwenden, indem Sie sie in einer anderen Funktion aufrufen. Sie können beispielsweise einen floatError erstellen, der nur das Hinzufügen von zwei Floats zulässt:

 # First call the base exception classes:
class errors(Exception):
pass
# Next, derive your own exception from the base class:
class FloatError(errors):
def __init__(self, value, message):
self.value = value
self.message = message
# Create a function to add two floats:
def addTwoFloat(a, b):
if (type(a) and type(b)) != float:
raise FloatError(a+b,"Numbers must be float to add")
else:
print(a + b)
addTwoFloat(4, 7)
Output: __main__.FloatError: (11, 'Numbers must be float to add')

Da Sie jetzt eine FloatError- Klasse definiert haben , löst Python diese aus, wenn Sie versuchen, zwei Nicht-Float-Literale mit der Funktion addtwoFloat hinzuzufügen .

Sie können die FloatError- Klasse in derselben Python-Datei drucken, in der Sie sie erstellt haben, um zu sehen, was passiert:

 print(FloatError)
Output: <class '__main__.FloatError'>

FloatError ist jedoch keine integrierte Python-Ausnahme. Sie können dies überprüfen, indem Sie FloatError in einer anderen frischen Python-Datei aufrufen, in der Sie diese Klasse nicht erstellt haben:

 print(FloatError)
Output: NameError: name 'FloatError' is not defined

Sie erhalten einen NameError, weil Python ihn nicht als Standardausnahme erkennt.

Sie können auch versuchen, andere Fehlerklassen selbst zu definieren, um zu sehen, wie sie sich auswirken.

Machen Sie Ihre Python-Programme mit Ausnahmen benutzerfreundlicher

Es gibt viele Standardausnahmen in Python. Sie können aber auch Ihre definieren. Nichtsdestotrotz hängt die Benutzerfreundlichkeit Ihres Programms in gewissem Maße davon ab, wie es mit verschiedenen Ausnahmen umgeht (ob benutzerdefinierte, unspezifische oder standardmäßige).

Mit Ausnahmen können Sie jedoch bestimmen, wie Ihr Programm funktionieren soll, wenn Benutzer mit ihnen interagieren. Die klare und prägnante Angabe der Fehlerursache gibt den Benutzern auch einen Hinweis darauf, was sie falsch machen, und weist sie manchmal in die richtige Richtung.