Python Ausnahmebehandlung
In der Informatik und Computerprogrammierung ist die Ausnahmebehandlung der Prozess der Reaktion auf das Auftreten von Ausnahmen – anomalen oder außergewöhnlichen Bedingungen, die eine spezielle Verarbeitung erfordern.
Python verfügt über viele eingebaute Ausnahmen, die ausgelöst werden, wenn ein Programm auf einen Fehler stößt, und die meisten externen Bibliotheken, wie die beliebte Requests, enthalten eigene benutzerdefinierte Ausnahmen, mit denen wir umgehen müssen.
Grundlegende Ausnahmebehandlung
Man kann nicht durch Null teilen, das ist eine mathematische Wahrheit, und wenn man versucht, dies in Python zu tun, löst der Interpreter die eingebaute Ausnahme ZeroDivisionError aus:
def divide(dividend , divisor):
print(dividend / divisor)
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Angenommen, wir möchten nicht, dass unser Programm seine Ausführung stoppt oder dem Benutzer eine Ausgabe zeigt, die er nicht versteht. Wenn wir eine nützliche und klare Nachricht ausgeben möchten, müssen wir die Ausnahme mit den Schlüsselwörtern try und except behandeln:
# try-except: Ausnahmen elegant behandeln
def divide(dividend , divisor):
try: # Versuche, diesen Code auszuführen
print(dividend / divisor)
except ZeroDivisionError: # Fange spezifischen Ausnahmetyp ab
print('You can not divide by 0')
divide(dividend=10, divisor=5)
2
divide(dividend=10, divisor=0)
You can not divide by 0
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
try und exceptcatch und handleerror und rescueif und elseBehandlung mehrerer Ausnahmen mit einem Ausnahmeblock
Sie können auch mehrere Ausnahmen in einer einzigen Zeile wie folgt behandeln, ohne mehrere Ausnahmeblöcke erstellen zu müssen.
# Mehrere Ausnahmen in einem except-Block behandeln
def divide(dividend , divisor):
try:
if (dividend == 10):
var = 'str' + 1 # Dies löst TypeError aus
else:
print(dividend / divisor)
except (ZeroDivisionError, TypeError) as error: # Mehrere Ausnahmetypen abfangen
print(error) # Die Fehlermeldung ausgeben
divide(dividend=20, divisor=5)
4
divide(dividend=10, divisor=5)
can only concatenate str (not "int") to str
divide(dividend=10, divisor=0)
division by zero
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
except-Block behandeln?except-Blöcke verwendenexcept (Exception1, Exception2) setzenFinally-Code in der Ausnahmebehandlung
Der Code im finally-Abschnitt wird immer ausgeführt, unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht:
# finally-Block: wird immer ausgeführt, unabhängig von Ausnahmen
def divide(dividend , divisor):
try:
print(dividend / divisor)
except ZeroDivisionError:
print('You can not divide by 0')
finally: # Wird immer ausgeführt, auch wenn eine Ausnahme auftritt
print('Execution finished')
divide(dividend=10, divisor=5)
2.0
Execution finished
divide(dividend=10, divisor=0)
You can not divide by 0
Execution finished
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
finally-Block ausgeführt?Benutzerdefinierte Ausnahmen
Benutzerdefinierte Ausnahmen werden initialisiert, indem eine class erstellt wird, die von der Basisklasse Exception von Python erbt, und mit dem Schlüsselwort raise ausgelöst werden:
# Benutzerdefinierte Ausnahme: Erstellung durch Vererbung von der Exception-Klasse
class MyCustomException(Exception):
pass
raise MyCustomException # Löst die benutzerdefinierte Ausnahme aus
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException
Um eine benutzerdefinierte Ausnahmemeldung zu deklarieren, können Sie diese als Parameter übergeben:
class MyCustomException(Exception):
pass
raise MyCustomException('A custom message for my custom exception')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
__main__.MyCustomException: A custom message for my custom exception
Das Behandeln einer benutzerdefinierten Ausnahme ist dasselbe wie bei jeder anderen:
try:
raise MyCustomException('A custom message for my custom exception')
except MyCustomException:
print('My custom exception was raised')
My custom exception was raised
Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen
Exception-Klasse erbt@exceptionException.create() auf