Artikelverzeichnis
Ausnahmen sowie Handhabung und Verwendung in Python
abnormal
Während der Ausführung des Programms treten zwangsläufig einige Fehler auf, wie zum Beispiel:
Verwendung einer Variablen, der kein Wert zugewiesen wurde,
Verwendung eines nicht vorhandenen Index,
Division durch 0
...
Wir nennen diese Fehler im Programm Ausnahmen.
Sobald während der Ausführung des Programms eine Ausnahme auftritt, wird das Programm sofort beendet und alle Codes nach der Ausnahme werden nicht ausgeführt!
Behandeln Sie Ausnahmen
Wenn während der Ausführung des Programms eine Ausnahme auftritt, besteht der Zweck nicht darin, unser Programm direkt zu beenden!
Python hofft, dass wir beim Auftreten einer Ausnahme Code schreiben können, um die Ausnahme zu behandeln!
try-Anweisung
try:
代码块(可能出现错误的语句)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
else:
代码块(没出错时要执行的语句)
finally:
代码块(该代码块总会执行)
„Try“ ist ein Muss. Es spielt keine Rolle, ob die else-Anweisung vorhanden ist oder nicht.
Es muss mindestens eine „exclusive“ und „final“-Anweisung vorhanden sein.
Sie können den Code, der möglicherweise schief geht, in eine Try-Anweisung einfügen, sodass er normal ausgeführt wird, wenn der Code keine Fehler aufweist. Wenn
ein Fehler auftritt, wird der Code in der Expect-Klausel ausgeführt, sodass wir Ausnahmen behandeln können durch Code
, um eine Ausnahme zu vermeiden. Bewirkt, dass das gesamte Programm beendet wird
Weitergabe von Ausnahmen (Auslösen von Ausnahmen)
Wenn in einer Funktion eine Ausnahme auftritt und die Ausnahme in der Funktion behandelt wird, wird die Ausnahme nicht weiter verbreitet.
Wenn die Ausnahme in der Funktion nicht behandelt wird, wird die Ausnahme weiterhin an den Funktionsaufruf weitergegeben.
Wenn der Funktionsaufruf handles Wenn eine Ausnahme empfangen wird, wird sie nicht mehr weitergegeben. Wenn sie nicht behandelt wird, wird sie weiterhin an den aufrufenden Ort weitergegeben,
bis sie an den globalen Bereich (Hauptmodul) übergeben wird. Wenn sie immer noch nicht behandelt wird, Das Programm wird beendet und die Ausnahmeinformationen werden angezeigt.
Wenn während der Ausführung des Programms eine Ausnahme auftritt, werden alle Ausnahmeinformationen in einem speziellen Ausnahmeobjekt gespeichert.
Wenn die Ausnahme weitergegeben wird, wird das Ausnahmeobjekt tatsächlich an die aufrufende Site geworfen.
Beispiel: Das Objekt der ZeroDivisionError-Klasse ist Wird speziell zur Darstellung der Division durch 0 verwendet. Das Ausnahmeobjekt
der NameError-Klasse wird speziell zur Behandlung variabler Fehlerausnahmen
usw. verwendet.
Wenn das Programm ausgeführt wird und keine Ausnahmebehandlung durchgeführt wird, breitet sich die Ausnahme weiter aus, bis sie an den globalen Bereich (Hauptmodul) übergeben wird. Zu diesem Zeitpunkt wird das Programm beendet und zeigt die Ausnahmeinformationen an.
Hier ist ein Beispiel:
def fn():
raise ValueError("这是一个自定义的异常")
def main():
try:
fn()
except ValueError as e:
print("发生了异常:", e)
main()
print("程序结束")
Im obigen Code fn()
verwendet die Funktion raise
eine Anweisung, um eine Ausnahme auszulösen ValueError
, und die Ausnahmeinformationen werden als „Dies ist eine benutzerdefinierte Ausnahme“ angegeben. Verwenden Sie in main()
der Funktion try-except
die Anweisung, um ValueError
die Ausnahme abzufangen und die Ausnahmeinformationen auszugeben. Geben Sie abschließend „Programmende“ aus.
eine Ausnahme auslösen
Sie können die Raise-Anweisung verwenden, um eine Ausnahme auszulösen.
Der Raise-Anweisung muss eine Ausnahmeklasse oder eine Instanz der Ausnahme folgen.
Wenn wir die Ausnahmebehandlung im Code verwenden, können wir raise
Anweisungen verwenden, um benutzerdefinierte Ausnahmen auszulösen oder abgefangene Ausnahmen erneut auszulösen.
Hier ist ein Beispiel:
def divide(x, y):
try:
if y == 0:
raise ZeroDivisionError("除数不能为零")
result = x / y
except ZeroDivisionError as e:
print(e)
raise # 重新引发已捕获的异常
else:
print("结果:", result)
try:
divide(10, 2)
divide(10, 0)
except ZeroDivisionError as e:
print("捕获异常:", e)
Wenn im obigen Code der Divisor Null ist, raise
lösen wir die integrierte ZeroDivisionError
Ausnahme durch die Anweisung aus und übergeben die Fehlermeldung. except ZeroDivisionError
Verwenden Sie gleichzeitig raise
Anweisungen im Block, um die abgefangene Ausnahme erneut auszulösen und die Ausnahme weiterhin extern zu verarbeiten.
Wenn wir eine Ausnahme auslösen verwenden, können wir wählen, ob wir eine Instanz der Ausnahmeklasse übergeben oder den Klassennamen verwenden möchten, um die Ausnahme direkt auszulösen. In diesem Fall haben wir Letzteres verwendet, nämlich raise ZeroDivisionError("除数不能为零")
.
Im Hauptcodeblock try-except
verwenden wir es, um ZeroDivisionError
Ausnahmen abzufangen und die Informationen zu den abgefangenen Ausnahmen auszudrucken. divide()
Auf diese Weise können Sie von Funktionen ausgelöste Ausnahmen behandeln .
Die Ausgabe ist wie folgt:
结果: 5.0
division by zero
捕获异常: division by zero
Durch die Verwendung raise
von Anweisungen können wir in unserem Code explizit Ausnahmen auslösen und diese nach Bedarf behandeln oder weitergeben. Dies macht die Ausnahmebehandlung flexibler und kontrollierbarer und trägt dazu bei, robusten Code zu schreiben.
try-exclusive-Anweisung
In Python können wir try-except
Anweisungen verwenden, um Ausnahmen bestimmter Typen abzufangen und zu behandeln. Zusätzlich zum Abfangen bestimmter Ausnahmetypen können wir auch try-except
mehrere except
Anweisungsblöcke verwenden, um verschiedene Ausnahmetypen separat zu behandeln.
Hier ist ein Beispiel:
def divide(x, y):
try:
result = x / y
print("结果:", result)
except ZeroDivisionError:
print("除数不能为零")
except TypeError:
print("类型错误:无法进行除法运算")
except ValueError:
print("数值错误")
divide(10, 2)
divide(10, 0)
divide(10, "2")
Im obigen Code divide()
wird die Funktion verwendet, um die Division zweier Zahlen zu berechnen und das Ergebnis auszugeben. Die Divisionsoperation wird in try
einem Block ausgeführt und wenn eine Ausnahme auftritt, except
wird der entsprechende Block basierend auf dem Ausnahmetyp ausgeführt.
Beim ersten Aufruf divide(10, 2)
wird keine Ausnahme ausgelöst und das Ergebnis ausgegeben, da der Divisor nicht Null ist.
Beim zweiten Aufruf divide(10, 0)
ist der Divisor Null und es wird eine Ausnahme ausgelöst ZeroDivisionError
. Das Programm führt den entsprechenden except ZeroDivisionError
Block aus und gibt „Der Divisor darf nicht Null sein“ aus.
Beim dritten Aufruf divide(10, "2")
ist der Divisor vom Typ String und die Division kann nicht durchgeführt werden. Es wird eine Ausnahme ausgelöst TypeError
. Das Programm führt den entsprechenden except TypeError
Block aus und gibt „Typfehler: Division kann nicht durchgeführt werden“ aus.
Die Ausgabe ist wie folgt:
结果: 5.0
除数不能为零
类型错误:无法进行除法运算
Durch die Verwendung mehrerer except
Blöcke können Sie spezifischen Behandlungscode für verschiedene Ausnahmetypen schreiben, sodass Ihr Programm eine Vielzahl möglicher Ausnahmen genauer behandeln kann. Dies verbessert die Robustheit und Zuverlässigkeit des Programms.
endlich Aussage
Neben der Verwendung von try-except
Anweisungen zur Behandlung von Ausnahmen können Sie auch finally
Klauseln verwenden, um Codeblöcke zu definieren, die unabhängig davon ausgeführt werden müssen, ob eine Ausnahme auftritt. finally
Der Codeblock in der Klausel wird try
ausgeführt, nachdem der Code im Block ausgeführt wurde, unabhängig davon, ob eine Ausnahme auftritt.
Hier ist ein Beispiel:
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("除数不能为零")
finally:
print("执行finally代码块")
divide(10, 2)
divide(10, 0)
Im obigen Code divide()
wird die Funktion verwendet, um die Division zweier Zahlen zu berechnen und das Ergebnis auszugeben, wobei try-except-finally
Anweisungen zur Behandlung von Ausnahmen verwendet werden.
Da der Divisor beim ersten Aufruf divide(10, 2)
ungleich Null ist, wird keine Ausnahme ausgelöst, sodass das Ergebnis gedruckt und finally
der Codeblock ausgeführt wird. Die Ausgabe ist wie folgt:
结果: 5.0
执行finally代码块
Beim zweiten Aufruf ist der Teiler Null, es wird eine Ausnahme divide(10, 0)
ausgelöst , die Ausnahme wird abgefangen und eine Fehlermeldung ausgegeben und die Ausführung des Codeblocks wird fortgesetzt. Die Ausgabe ist wie folgt:ZeroDivisionError
finally
除数不能为零
执行finally代码块
finally
Wie Sie sehen, wird der Code im Codeblock unabhängig davon ausgeführt, ob eine Ausnahme auftritt .
finally
Klauseln werden normalerweise zum Freigeben von Ressourcen verwendet, z. B. zum Schließen von Dateien, zum Freigeben von Sperren usw. Es stellt sicher, dass unabhängig davon, ob eine Ausnahme auftritt, einige notwendige Reinigungsvorgänge durchgeführt werden, um die Stabilität und Sicherheit des Programms zu gewährleisten.
else-Anweisung
Zusätzlich zu try-except
Anweisungen können Sie auch else
Klauseln verwenden, um try
einen Codeblock zu definieren, der ausgeführt wird, wenn innerhalb des Blocks keine Ausnahme auftritt.
Hier ist ein Beispiel:
def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("除数不能为零")
else:
print("结果:", result)
divide(10, 2)
divide(10, 0)
Im obigen Code divide()
wird die Funktion verwendet, um die Division zweier Zahlen zu berechnen und das Ergebnis auszugeben. Führen Sie Divisionsoperationen in try
einem Block durch. Wenn eine Division durch Null-Ausnahme auftritt, führt das Programm den entsprechenden except ZeroDivisionError
Block aus und gibt „Der Divisor darf nicht Null sein“ aus. Wenn keine Ausnahme auftritt, führt das Programm else
den Codeblock in der Klausel aus und gibt das Ergebnis aus.
Beim ersten Aufruf divide(10, 2)
wird keine Ausnahme ausgelöst und das Ergebnis ausgegeben, da der Divisor nicht Null ist.
Beim zweiten Aufruf divide(10, 0)
ist der Divisor Null und es wird eine Ausnahme ausgelöst ZeroDivisionError
. Das Programm führt den entsprechenden except ZeroDivisionError
Block aus und gibt „Der Divisor darf nicht Null sein“ aus, ohne else
den Codeblock in der Klausel auszuführen.
Die Ausgabe ist wie folgt:
结果: 5.0
除数不能为零
Durch die Verwendung else
von Klauseln können Sie die normale Verarbeitungslogik else
darin platzieren und so Ihren Code klarer und prägnanter gestalten. Auf diese Weise können wir Ausnahmebehandlung und normale Logikverarbeitung klar unterscheiden und so die Lesbarkeit und Wartbarkeit des Codes verbessern.
Benutzerdefinierter Ausnahmetyp
Wenn wir außerdem den Ausnahmetyp anpassen müssen, können wir Exception
durch Erben der integrierten Klasse einen neuen Ausnahmetyp erstellen und diesen Typ verwenden, wenn eine Ausnahme ausgelöst werden muss.
Hier ist ein Beispiel:
class MyError(Exception):
def __init__(self, msg):
self.msg = msg
def divide(x, y):
try:
if y == 0:
raise MyError("除数不能为零")
result = x / y
except MyError as e:
print(e.msg)
else:
print("结果:", result)
finally:
print("执行清理操作")
divide(10, 2)
divide(10, 0)
Im obigen Code haben wir Exception
einen neuen Ausnahmetyp erstellt, indem wir die Klasse geerbt MyError
und in ihrem Konstruktor eine Fehlermeldung übergeben haben. In divide()
der Funktion lösen wir beim Teilen durch Null eine benutzerdefinierte Ausnahme aus MyError
und fangen diese Ausnahme ab und behandeln sie. else
Wenn keine Ausnahme auftritt, wird der Codeblock in der Klausel ausgeführt und das Ergebnis gedruckt. finally
Unabhängig davon, ob eine Ausnahme auftritt, wird der Codeblock in der Klausel schließlich ausgeführt und „Bereinigungsvorgang wird ausgeführt“ gedruckt.
Die Ausgabe ist wie folgt:
结果: 5.0
执行清理操作
除数不能为零
执行清理操作
Durch das Anpassen von Ausnahmetypen können wir unseren eigenen Code besser organisieren und verwalten und so die Lesbarkeit und Wartbarkeit des Codes verbessern. Gleichzeitig kann es flexibler mit verschiedenen Arten von Ausnahmesituationen umgehen, um unterschiedlichen Geschäftsanforderungen gerecht zu werden.
Zusammenfassen
Dieser Artikel stellt die Verwendung und Behandlung von Ausnahmen in Python vor. Ausnahmen sind Fehler oder außergewöhnliche Bedingungen, die während der Programmausführung auftreten und mithilfe der try-exclusive-Anweisung abgefangen und behandelt werden können.
Der Artikel erklärt zunächst, was Ausnahmen sind und beschreibt die Bedeutung der Ausnahmebehandlung. Als Nächstes stellten wir vor, wie man mit der try-exclusive-Anweisung Ausnahmen abfängt und behandelt. Der Code im Try-Block kann eine Ausnahme auslösen, während der Code im Except-Block nur dann ausgeführt wird, wenn die entsprechende Ausnahme auftritt.
In dem Artikel wurde auch die „final“-Anweisung erwähnt, mit der wir einen Codeblock definieren können, der unabhängig davon ausgeführt wird, ob eine Ausnahme auftritt. Dies ist nützlich, um sicherzustellen, dass Ressourcen freigegeben oder bereinigt werden.
Darüber hinaus wird in dem Artikel auch die else-Anweisung vorgestellt, mit der der Code angegeben werden kann, der ausgeführt werden soll, wenn im try-Block keine Ausnahme ausgelöst wird. Auf diese Weise können wir je nachdem, ob eine Ausnahme auftritt, unterschiedliche Maßnahmen ergreifen.
Abschließend wurde in dem Artikel auch die Bedeutung und Verwendung benutzerdefinierter Ausnahmetypen erwähnt. Durch die Definition unserer eigenen Ausnahmeklassen können wir bestimmte Ausnahmesituationen besser organisieren und behandeln, wodurch der Code lesbarer und wartbarer wird.
Durch die Einführung dieses Artikels können Leser lernen, wie man Ausnahmen in Python behandelt und wie man den Ausnahmemechanismus verwendet, um robusteren Code zu schreiben. Gleichzeitig hilft die Vertrautheit mit den zugehörigen Konzepten und der Syntax der Ausnahmebehandlung den Lesern, Fehlerbedingungen im Programm besser zu debuggen und zu behandeln.