1. Was sind Python-Ausnahmen?
Python-Ausnahmen sind eine Art von Fehler, die während der Programmausführung auftreten. Normalerweise führt ein Programm den Code von oben nach unten aus. Wenn jedoch unter bestimmten Umständen ein Fehler auftritt, wird die Ausführung des Codes an dieser Stelle unterbrochen und eine Ausnahme ausgelöst. Wenn Sie beispielsweise versuchen, durch Null zu dividieren, tritt ein ZeroDivisionError
auf; wenn Sie versuchen, auf einen nicht existierenden Listenindex zuzugreifen, tritt ein IndexError
auf.
1.1 Häufige Arten von Ausnahmen
Python verfügt über viele integrierte Ausnahmen. Einige gängige Beispiele sind unten aufgeführt.
ValueError
: Wenn eine Funktion einen ungeeigneten Wert empfängtTypeError
: Wenn eine Operation oder Funktion auf einem ungültigen Datentyp ausgeführt wirdIndexError
: Wenn auf einen Index außerhalb des Bereichs einer Sequenz (wie einer Liste) zugegriffen wirdZeroDivisionError
: Wenn versucht wird, durch Null zu dividieren
Diese Ausnahmen bieten nützliche Diagnoseinformationen, wenn unerwartete Fehler während der Programmausführung auftreten.
2. Grundlegende Ausnahmebehandlung mit try
und except
In Python wird die Ausnahmebehandlung mithilfe von try
und except
durchgeführt. Dies verhindert, dass das Programm bei einem Fehler abbricht, und ermöglicht, dass andere Teile des Programms weiter ausgeführt werden, selbst wenn ein Fehler auftritt.
2.1 Grundlegende Syntax
Platzieren Sie den Code, in dem ein Fehler auftreten könnte, im try
-Block und schreiben Sie den Code, der ausgeführt werden soll, wenn dieser Fehler auftritt, in den except
-Block.
try:
result = 10 / 0
except ZeroDivisionError:
print("ゼロで割ることはできません。")
In diesem Beispiel wird, wenn ein ZeroDivisionError
auftritt, der except
-Block ausgeführt und „Durch Null kann nicht dividiert werden.“ ausgegeben.
2.2 Mehrere except
-Blöcke
Wenn Sie mehrere verschiedene Ausnahmen behandeln möchten, können Sie mehrere except
-Blöcke verwenden. Sie können beispielsweise unterschiedliche Aktionen für verschiedene Fehler wie NameError
oder TypeError
durchführen.
try:
print(a)
except NameError:
print('変数aの値が定義されていません。')
except TypeError:
print('不正な型が使用されました。')
In diesem Code tritt ein NameError
auf, da a
nicht definiert ist, und die entsprechende Meldung wird angezeigt.
3. Umgang mit mehreren Ausnahmen gleichzeitig
Wenn in einem Programm mehrere verschiedene Arten von Ausnahmen auftreten können, können diese in einem einzigen except
-Block zusammen behandelt werden.
3.1 Mehrere Ausnahmen in einem einzigen except
-Block behandeln
Wie folgt können Sie im except
-Block mehrere Ausnahmen als Tupel angeben.
try:
num = int(input("数字を入力してください: "))
result = 10 / num
except (ValueError, ZeroDivisionError):
print("無効な入力が行われたか、ゼロで割り算を試みました。")
In diesem Beispiel werden Fehler zusammen behandelt, wenn der Benutzer einen ungültigen Wert oder Null eingibt und versucht, eine Division durchzuführen, und es wird „Ungültige Eingabe oder Versuch, durch Null zu dividieren.“ ausgegeben.
3.2 Ausnahmen mithilfe der übergeordneten Klasse behandeln
Die Exception
-Klasse ist die übergeordnete Klasse der meisten integrierten Ausnahmen. Wenn Sie alle Ausnahmen abfangen möchten, können Sie diese Klasse verwenden. Da diese Methode jedoch sehr umfassend ist, ist Vorsicht geboten.
try:
# エラーが発生する可能性のあるコード
except Exception as e:
print("エラーが発生しました:", e)
Mit dieser Methode wird jede auftretende Ausnahme abgefangen und eine Meldung angezeigt. Es wird jedoch empfohlen, das Design so zu gestalten, dass möglichst spezifische Ausnahmen behandelt werden.

4. Ausnahmen auslösen (raise
)
Während der Programmausführung können Sie manuell eine Ausnahme auslösen, wenn eine bestimmte Bedingung nicht erfüllt ist. Verwenden Sie dazu die raise
-Anweisung.
4.1 Verwendung der raise
-Anweisung
Das folgende Beispiel löst einen ValueError
aus, wenn ein negativer Wert übergeben wird.
def check_value(value):
if value < 0:
raise ValueError("負の値は許可されていません。")
return value
try:
result = check_value(-1)
except ValueError as e:
print(e)
In diesem Beispiel wird der negative Wert -1
an die check_value
-Funktion übergeben, wodurch ein ValueError
ausgelöst und die Meldung „Negative Werte sind nicht erlaubt.“ angezeigt wird.
4.2 Anwendung von raise
Die raise
-Anweisung kann auch zum Definieren benutzerdefinierter Ausnahmeklassen verwendet werden. Indem Sie eigene Ausnahmen erstellen und diese unter bestimmten Bedingungen auslösen, können Sie die Fehlerbehandlung Ihres Programms flexibler gestalten.
5. Abrufen von Ausnahmeinformationen
Wenn eine Ausnahme auftritt, können Sie durch das Abrufen detaillierter Informationen die Fehlerdiagnose und das Debugging erleichtern. Sie können das Ausnahmeobjekt abrufen, indem Sie die as
-Klausel im except
-Block verwenden.
5.1 Verwendung der as
-Klausel
Das folgende Beispiel ruft das Ausnahmeobjekt als e
ab und zeigt dessen Meldung an.
try:
result = 10 / 0
except ZeroDivisionError as e:
print("エラーが発生しました:", e)
In diesem Code wird, wenn ein ZeroDivisionError
auftritt, die Meldung „Es ist ein Fehler aufgetreten: division by zero“ angezeigt. Das Ausnahmeobjekt enthält detaillierte Informationen wie den Ausnahmetyp und die Fehlermeldung.
5.2 Nutzung von Ausnahmeobjekten
Ausnahmeobjekte können nicht nur zur Anzeige von Fehlermeldungen, sondern auch zur Protokollierung und zur Durchführung zusätzlicher Aktionen für bestimmte Fehler verwendet werden. Beispielsweise können Sie Fehlermeldungen in eine Protokolldatei schreiben, um sie später beim Debugging zu nutzen.
6. Best Practices für die Ausnahmebehandlung
Effektive Ausnahmebehandlung verbessert die Robustheit und Zuverlässigkeit eines Programms. Im Folgenden werden einige Best Practices für die Ausnahmebehandlung in Python vorgestellt.
6.1 Spezifische Ausnahmen abfangen
Versuchen Sie, möglichst spezifische Ausnahmen abzufangen. Anstatt eine breite Exception
abzufangen, fangen Sie spezifische, erwartete Ausnahmen wie ValueError
oder TypeError
ab. Dadurch wird die Fehlerbehandlung klarer und zielgerichteter.
6.2 Ausnahmen protokollieren
Das Protokollieren von Fehlermeldungen erleichtert die spätere Identifizierung der Fehlerursache. Insbesondere in großen Programmen oder Systemen ist es wichtig, Informationen über das Auftreten von Ausnahmen aufzuzeichnen.
6.3 Graceful Degradation
Es ist wichtig, eine „Graceful Degradation“ (sanfte Herabstufung) zu gestalten, damit das Programm bei einer Ausnahme nicht vollständig abstürzt. Durch die Anzeige benutzerfreundlicher Fehlermeldungen oder die Ausführung alternativer Aktionen kann beispielsweise die Zuverlässigkeit des Programms verbessert werden.
6.4 Redundante Ausnahmebehandlung vermeiden
Vermeiden Sie es, alle Ausnahmen abzufangen und sie dann einfach zu ignorieren. Dies erschwert das Debugging und kann zu unerwartetem Programmverhalten führen. Wenn eine Ausnahme abgefangen wird, sollten Sie zumindest die Fehlermeldung protokollieren oder eine entsprechende Verarbeitung durchführen.
6.5 Nutzung des finally
-Blocks
Der finally
-Block wird verwendet, um Code zu schreiben, der immer ausgeführt wird, unabhängig davon, ob eine Ausnahme auftritt oder nicht. Hier können Sie Verarbeitungen schreiben, die unbedingt ausgeführt werden müssen, wie das Schließen von Dateien oder das Freigeben von Ressourcen.
try:
file = open("example.txt", "r")
# ファイルを読み取る処理
except FileNotFoundError:
print("ファイルが見つかりません。")
finally:
file.close()
In diesem Beispiel stellt der finally
-Block sicher, dass die Datei geschlossen wird, selbst wenn das Öffnen der Datei fehlgeschlagen ist.
7. Zusammenfassung
Die Python-Ausnahmebehandlung ist eine wichtige Technik, die die Zuverlässigkeit von Programmen erhöht und eine angemessene Reaktion auf Fehler ermöglicht. Durch das Abfangen von Fehlern mit try
und except
und das Erstellen benutzerdefinierter Ausnahmen mit raise
können Sie die Flexibilität und Wartbarkeit Ihres Codes verbessern.
- Wir haben verstanden, was Ausnahmen sind, und die gängigen Arten von Ausnahmen kennengelernt.
- Wir haben gelernt, wie man eine grundlegende Ausnahmebehandlung mit
try
undexcept
durchführt. - Wir haben gesehen, wie man mehrere Ausnahmen in einem einzigen
except
-Block gleichzeitig behandelt. - Wir haben die Verwendung der
raise
-Anweisung zum Auslösen von Ausnahmen und ihre Anwendung gelernt. - Wir haben gelernt, wie man Ausnahmeobjekte abruft, um detaillierte Fehlerinformationen zu erhalten.
- Zuletzt haben wir die Best Practices für die Ausnahmebehandlung betrachtet und die Gestaltung einer effektiven Fehlerbehandlung besprochen.
Ausnahmebehandlung ist eine unverzichtbare Technik, um die Zuverlässigkeit von Programmen zu gewährleisten. Nutzen Sie diese Techniken, um benutzerfreundliche und robuste Python-Anwendungen zu entwickeln.