Kurs
Ausnahme- und Fehlerbehandlung in Python
Fehler und Ausnahmen können zu unerwartetem Verhalten führen oder sogar die Ausführung eines Programms verhindern. Python bietet verschiedene Funktionen und Mechanismen, um diese Probleme zu lösen und die Robustheit des Codes zu verbessern. In diesem Lernprogramm lernen wir verschiedene Fehlertypen und eingebaute Funktionen anhand von Beispielen kennen.
Ein Fehler ist ein Problem in einem Programm, das das Programm daran hindert, seine Aufgabe zu erfüllen. Im Vergleich dazu ist eine Ausnahme eine Bedingung, die den normalen Programmablauf unterbricht. Sowohl Fehler als auch Ausnahmen sind eine Art Laufzeitfehler, das heißt, sie treten während der Ausführung eines Programms auf.
Mit einfachen Worten: Ein Fehler ist ein kritisches Problem, das eine normale Anwendung nicht abfangen sollte, während eine Ausnahme ein Zustand ist, den ein Programm abfangen sollte.
Wir wollen mehr über Fehler und Ausnahmen lernen, indem wir uns verschiedene Beispiele ansehen. Um diese einfach auszuführen, kannst du kostenlos eine DataLab-Arbeitsmappe erstellen, auf der Python vorinstalliert ist und die alle Codebeispiele enthält.
Fehler in Python
Hier ist ein Beispiel für einen Syntaxfehler, bei dem ein Return außerhalb der Funktion nichts bedeutet. Wir sollten keine Fehler in einem Programm behandeln. Stattdessen müssen wir eine Funktion erstellen, die den String zurückgibt.
return "DataCamp"
Input In [1]
return "DataCamp"
^
SyntaxError: 'return' outside function
Wir haben die Funktion erstellt, aber mit der falschen Einrückung. Wir sollten keine Einrückungsfehler zur Laufzeit behandeln. Wir können das manuell machen oder Code-Formatierungstools verwenden.
def fun():
return "DataCamp"
Input In [2]
return "DataCamp"
^
IndentationError: expected an indented block
Ausnahmen in Python
Wir sind auf eine ZeroDivisionError
(Exception) gestoßen. Wir können sie zur Laufzeit mit den Blöcken try
und except
behandeln.
test = 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Input In [4], in <cell line: 1>()
----> 1 test = 1/0
ZeroDivisionError: division by zero
NameError
Ausnahmen sind recht häufig, wenn eine Variable nicht gefunden wird. Wir können die Ausnahme auch behandeln, indem wir entweder die Variable ersetzen oder die Warnung ausgeben.
y = test
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [5], in <cell line: 1>()
----> 1 y = test
NameError
Eingebaute Python-Ausnahmen
Hier ist die Liste der Standardausnahmen in Python mit Beschreibungen:
AssertionError
: Wird ausgelöst, wenn die assert-Anweisung fehlschlägt.EOFError
: Wird ausgelöst, wenn die Funktioninput()
die Bedingung "Ende der Datei" erfüllt.AttributeError
: Wird ausgelöst, wenn die Zuweisung oder der Verweis eines Attributs fehlschlägt.TabError
: Wird ausgelöst, wenn die Einrückungen aus inkonsistenten Tabulatoren oder Leerzeichen bestehen.ImportError
: Wird ausgelöst, wenn der Import des Moduls fehlschlägt.IndexError
: tritt auf, wenn der Index einer Sequenz außerhalb des Bereichs liegtKeyboardInterrupt
: wird ausgelöst, wenn der Benutzer Unterbrechungstasten (Strg + C oder Löschen) eingibt.RuntimeError
: tritt auf, wenn ein Fehler in keine Kategorie fällt.NameError
: Wird ausgelöst, wenn eine Variable nicht im lokalen oder globalen Bereich gefunden wird.MemoryError
: Wird ausgelöst, wenn Programmen der Speicher ausgeht.ValueError
: tritt auf, wenn die Operation oder Funktion ein Argument mit dem richtigen Typ, aber dem falschen Wert erhält.ZeroDivisionError
: Wird ausgelöst, wenn du einen Wert oder eine Variable durch Null teilst.SyntaxError
: Wird vom Parser ausgelöst, wenn die Python-Syntax falsch ist.IndentationError
: tritt auf, wenn eine falsche Einrückung vorliegt.SystemError
: Wird ausgelöst, wenn der Interpreter einen internen Fehler feststellt.
Eine vollständige Liste der Fehler und Ausnahmen in Python findest du in der Dokumentation.
Lerne in unserem Kurs " Objektorientierte Programmierung in Python " mehr über Python-Ausnahmen. Du lernst, wie du Klassen erstellst und Vererbung und Polymorphie nutzt, um Code wiederzuverwenden und zu optimieren.
Behandlung von Ausnahmen mit try, except, else und finally
Nachdem wir etwas über Fehler und Ausnahmen gelernt haben, werden wir lernen, wie man sie mit den Blöcken try
, except
, else
und finally
behandelt.
Was verstehen wir also unter Umgang mit ihnen? Unter normalen Umständen halten diese Fehler die Codeausführung an und zeigen die Fehlermeldung an. Um stabile Systeme zu schaffen, müssen wir diese Fehler vorhersehen und uns alternative Lösungen oder Warnmeldungen einfallen lassen.
In diesem Abschnitt erfahren wir, was die einzelnen Blöcke tun und wie wir sie nutzen können, um robusten Code zu schreiben.
Die try und except Anweisung
Die einfachste Art, Ausnahmen in Python zu behandeln, ist die Verwendung des try
und except
Blocks.
- Führe den Code unter der Anweisung
try
aus. - Wenn eine Ausnahme ausgelöst wird, führe den Code unter der Anweisung
except
aus.
Anstatt bei einem Fehler oder einer Ausnahme stehen zu bleiben, wird unser Code nach alternativen Lösungen suchen.
Einfaches Beispiel
Im ersten Beispiel werden wir versuchen, die undefinierte Variable x
zu drucken. Unter normalen Umständen sollte es einen Fehler auslösen und die Ausführung stoppen, aber mit dem try
und except
Block können wir das Verhalten des Ablaufs ändern.
- Das Programm wird den Code unter der Anweisung
try
ausführen. - Wie wir wissen, ist
x
nicht definiert, also wird die except-Anweisung ausgeführt und die Warnung ausgegeben.
try:
print(x)
except:
print("An exception has occurred!")
An exception has occurred!
Beispiel für mehrere Except-Anweisungen
Im zweiten Beispiel werden wir mehrere except
Anweisungen verwenden, um mehrere Arten von Ausnahmen zu behandeln.
- Wenn eine
ZeroDivisionError
Ausnahme ausgelöst wird, druckt das Programm "Du kannst einen Wert nicht durch Null teilen." - Bei den restlichen Ausnahmen wird "Etwas anderes ist schief gelaufen" gedruckt.
Sie ermöglicht es uns, flexiblen Code zu schreiben, der mehrere Ausnahmen gleichzeitig behandeln kann, ohne abzubrechen.
try:
print(1/0)
except ZeroDivisionError:
print("You cannot divide a value with zero")
except:
print("Something else went wrong")
You cannot divide a value with zero
Laden der Datei Beispiel
Schauen wir uns nun ein praktischeres Beispiel an.
Im folgenden Code lesen wir die CSV-Datei. Wenn die Ausnahme FileNotFoundError
ausgelöst wird, gibt der Code den Fehler und eine zusätzliche Meldung über die Datei data.csv
aus.
Ja, wir können Standard-Fehlermeldungen ausgeben, ohne die Ausführung zu unterbrechen.
try:
with open('data.csv') as file:
read_data = file.read()
except FileNotFoundError as fnf_error:
print(fnf_error)
print("Explanation: We cannot load the 'data.csv' file")
[Errno 2] No such file or directory: 'data.csv'
Explanation: We cannot load the 'data.csv' file
Der Versuch mit else-Klausel
Wir haben try
und except
kennengelernt und werden nun die Anweisung else
kennenlernen.
Wenn die Anweisung try
keine Ausnahme auslöst, tritt der Code in den else
Block ein. Sie ist die Abhilfe oder eine Rückfalloption, wenn du erwartest, dass ein Teil deines Skripts eine Ausnahme erzeugt. Sie wird in der Regel in einem kurzen Einrichtungs- oder Überprüfungsabschnitt verwendet, in dem du nicht willst, dass sich bestimmte Fehler verstecken.
Hinweis: Im try-except-Block kannst du die else
nach allen except
Anweisungen verwenden.
Einfaches Beispiel
Wir fügen die Anweisung else
zum Beispiel ZeroDivisionError
hinzu. Wie wir sehen, wird die Druckfunktion unter der Anweisung else
ausgeführt, wenn es keine Ausnahmen gibt, und zeigt das Ergebnis an.
try:
result = 1/3
except ZeroDivisionError as err:
print(err)
else:
print(f"Your answer is {result}")
Your answer is 0.3333333333333333
IndexError mit else Beispiel
Wir wollen mehr darüber erfahren, indem wir eine einfache Funktion erstellen und sie für verschiedene Szenarien testen.
Die Funktion find_nth_value()
hat x
(Liste) und n
(Indexnummer) als Argumente. Wir haben einen try
, except
und else
Block erstellt, um die IndexError
Ausnahme zu behandeln.
x = [5,8,9,13]
def find_nth_value(x,n):
try:
result = x[n]
except IndexError as err:
print(err)
else:
print("Your answer is ", result)
Die Liste x
hat vier Werte, und wir werden sie für den 6. und 2.
# Testing
find_nth_value(x,6)
find_nth_value(x,2)
- Bei n=6 wurde die Ausnahme
IndexError
ausgelöst und wir bekamen die Fehlermeldung "list index out of range" zu sehen. - Bei n=2 wurde keine Ausnahme ausgelöst, und die Funktion hat das Ergebnis gedruckt, das unter der Anweisung
else
steht.
list index out of range
Your answer is 9
Das Schlüsselwort finally in Python
Das Schlüsselwort finally
im Block try
-except
wird immer ausgeführt, unabhängig davon, ob es eine Ausnahme gibt oder nicht. In einfachen Worten: Der Codeblock finally
wird ausgeführt, nachdem der Block try
, except
und else
abgeschlossen ist. Es ist sehr nützlich, um Ressourcen aufzuräumen und das Objekt zu schließen, insbesondere die Dateien zu schließen.
Die Funktion divide
wird erstellt, um ZeroDivisionError
Ausnahmen zu behandeln und das Ergebnis anzuzeigen, wenn es keine Ausnahmen gibt. Egal, wie das Ergebnis aussieht, es wird immer finally
ausgeführt, um "Code by DataCamp" in grüner Farbe zu drucken.
def divide(x,y):
try:
result = x/y
except ZeroDivisionError:
print("Please change 'y' argument to non-zero value")
except:
print("Something went wrong")
else:
print(f"Your answer is {result}")
finally:
print("\033[92m Code by DataCamp\033[00m")
Im ersten Test dividieren wir 1 durch 0, was die Ausnahme ZeroDivisionError
auslösen und die Meldung ausgeben sollte. Wie wir sehen können, haben wir eine zusätzliche Zeile nach der Fehlermeldung.
divide(1,0)
Please change 'y' argument to non-zero value
Code by DataCamp
Wenn wir eine gültige Eingabe machen, zeigt sie das Ergebnis an, indem sie else
und finally
blockiert.
divide(3,4)
Your answer is 0.75
Code by DataCamp
Anstelle einer ganzen Zahl haben wir einen String als zweites Argument hinzugefügt, der eine Ausnahme ausgelöst hat, die sich von ZeroDivisionError
unterscheidet und eine andere Meldung enthält.
divide(1,'g')
Something went wrong
Code by DataCamp
In allen drei Szenarien gibt es eine Gemeinsamkeit. Der Code führt immer die Druckfunktion unter der Anweisung finally
aus.
Wenn du neu in Python bist und wie ein echter Programmierer programmieren möchtest, dann probiere unseren Lernpfad zur Python-Programmierung aus. Du lernst, effizienten Code zu schreiben, Python-Funktionen, Software-Engineering, Unit-Tests und objektorientierte Programmierung.
Verschachtelte Ausnahmebehandlung in Python
Wir brauchen eine verschachtelte Ausnahmebehandlung, wenn wir das Programm darauf vorbereiten, mehrere Ausnahmen in einer Folge zu behandeln. Wir können zum Beispiel einen weiteren try-except-Block unter der Anweisung else
hinzufügen. Wenn also die erste Anweisung keine Ausnahme auslöst, überprüfe die zweite Anweisung mit der anderen Hälfte des Codes.
Ändern der Divisionsfunktion
Wir haben die Funktion divide
aus dem vorherigen Beispiel geändert und einen verschachtelten Try-Except-Block unter der Anweisung else
hinzugefügt. Wenn es also keine AttributeError
gibt, wird der else
ausgeführt und der neue Code auf die ZeroDivisionError
Ausnahme überprüft.
def divide(x,y):
try:
value = 50
x.append(value)
except AttributeError as atr_err:
print(atr_err)
else:
try:
result = [i / y for i in x]
print( result )
except ZeroDivisionError:
print("Please change 'y' argument to non-zero value")
finally:
print("\033[92m Code by DataCamp\033[00m")
Im ersten Szenario geben wir die Liste der vier Werte x
und Nenner 3 an. Das Skript fügt der Liste 50 hinzu, teilt den einzelnen Wert in der Liste durch 3 und zeigt das Ergebnis an.
x = [40,65,70,87]
divide(x,3)
Die Funktion wurde erfolgreich ausgeführt, ohne Ausnahmen auszulösen.
[13.333333333333334, 21.666666666666668, 23.333333333333332, 29.0, 16.666666666666668]
Code by DataCamp
Statt einer Liste haben wir eine ganze Zahl als erstes Argument angegeben, was AttributeError
ausgelöst hat.
divide(4,3)
'int' object has no attribute 'append'
Code by DataCamp
Im letzten Szenario haben wir die Liste angegeben, aber 0 ist das zweite Argument, das die ZeroDivisionError
Ausnahme unter der else
Anweisung ausgelöst hat.
divide(x,0)
Please change 'y' argument to non-zero value
Code by DataCamp
Beispiel für Dateibearbeitung
Schauen wir uns weitere praktische Beispiele für das Laden der Datei, das Schreiben eines Textes und das Schließen der Datei an.
Die Funktion file_editor()
wird:
- Überprüfe die
FileNotFoundError
Ausnahme für die Funktionopen()
. - Wenn die äußere Ausnahme nicht ausgelöst wird, wird nach der
write()
Funktionsausnahme gesucht. - Egal wie, nach dem Öffnen der Datei wird sie mit der Anweisung
finally
geschlossen. - Wenn die äußere try-Anweisung die Ausnahme auslöst, gibt sie die Fehlermeldung mit einem ungültigen Dateipfad zurück.
def file_editor(path,text):
try:
data = open(path)
try:
data.write(text)
except:
print("Unable to write the data. Please add an append: 'a' or write: 'w' parameter to the open() function.")
finally:
data.close()
except:
print(f"{path} file is not found!!")
Im ersten Szenario geben wir den Dateipfad und den Text an.
path = "data.txt"
text = "DataLab: Share your data analysis in a cloud-based environment--no installation required."
file_editor(path,text)
Die äußere Ausnahme wird ausgelöst.
data.txt file is not found!!
Um die Ausnahme "Datei nicht gefunden" zu lösen, müssen wir eine Datei data.txt
mit dem Linux-Befehl echo
erstellen.
!echo "File by DataCamp" > "data.txt"
Danach führst du die Funktion file_editor()
erneut aus.
file_editor(path,text)
Die innere Ausnahme wird ausgelöst, da die Funktion write()
nicht in der Lage ist, den Text hinzuzufügen.
Unable to write the data. Please add an append: 'a' or write: 'w' parameter to the open() function.
Um dieses Problem zu lösen, müssen wir die dritte Zeile von data = open(path)
in data = open(path, 'a')
ändern. Damit können wir den neuen Text an die Datei anhängen.
Nachdem wir die Funktion erneut ausgeführt haben, haben wir den Text erfolgreich zur Datei hinzugefügt.
file_editor(path,text)
Eine verschachtelte Ausnahmebehandlung wird nicht empfohlen, da sie die Ausnahmebehandlung komplexer macht; Entwickler verwenden mehrere try
-except
Blöcke, um eine einfache sequenzielle Ausnahmebehandlung zu erstellen.
Hinweis: Du kannst auch einen verschachtelten try
-except
Block unter der try
oder except
Anweisung einfügen. Das hängt ganz von deinen Anforderungen ab.
Auslösen von Ausnahmen in Python
Als Python-Entwickler kannst du eine Ausnahme auslösen, wenn bestimmte Bedingungen erfüllt sind. So kannst du das Programm je nach deinen Bedürfnissen unterbrechen.
Um eine Ausnahme auszulösen, müssen wir das Schlüsselwort raise
gefolgt von einem Ausnahmenamen verwenden.
Beispiel für das Auslösen eines Wertfehlers
Wir können Ausnahmen einfach auslösen, indem wir das Schlüsselwort raise in die Anweisung if
/else
einfügen.
In diesem Beispiel erhöhen wir die ValueError
, wenn der Wert 1.000 übersteigt. Wir haben den Wert auf 2.000 geändert, was die Anweisung if
TRUE
und ValueError
mit der benutzerdefinierten Meldung aufgeworfen hat. Die benutzerdefinierte Fehlermeldung hilft dir, das Problem schnell herauszufinden.
value = 2_000
if value > 1_000:
# raise the ValueError
raise ValueError("Please add a value lower than 1,000")
else:
print("Congratulations! You are the winner!!")
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
----> 4 raise ValueError("Please add a value lower than 1,000")
5 else:
6 print("Congratulations! You are the winner!!")
ValueError: Please add a value lower than 1,000
Beispiel für das Auslösen einer Ausnahme
Wir können auch eine beliebige eingebaute Python-Ausnahme auslösen, wenn die Bedingung erfüllt ist. In unserem Fall haben wir eine generische Exception mit der Fehlermeldung ausgelöst.
if value > 1_000:
# raise the Exception
raise Exception("Please add a value lower than 1,000")
else:
print("Congratulations! You are the winner!!")
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
----> 3 raise Exception("Please add a value lower than 1,000")
4 else:
5 print("Congratulations! You are the winner!!")
Exception: Please add a value lower than 1,000
Beispiel für die Behandlung einer ausgelösten Ausnahme
Wir können auch unsere eigene Ausnahme erstellen und die Ausnahme mit dem try
-except
Block behandeln.
Im Beispiel haben wir ein Beispiel für einen Wertfehler unter der Anweisung try
hinzugefügt.
Wie soll das funktionieren? Anstatt die Ausnahme auszulösen und das Programm zu beenden, wird die von uns angegebene Fehlermeldung angezeigt.
value = 2_000
try:
if value > 1_000:
# raise the ValueError
raise ValueError("Please add a value lower than 1,000")
else:
print("Congratulations! You are the winner!!")
# if false then raise the value error
except ValueError as e:
print(e)
Diese Art der Ausnahmebehandlung hilft uns, uns auf Fehler vorzubereiten, die von Python nicht abgedeckt werden und die für deine Anwendung spezifisch sind.
Please add a value lower than 1,000
Was ist neu in Python 3.10 und 3.11 bei der Behandlung von Ausnahmen?
In neueren Python-Versionen wie 3.10 und 3.11 wurden seit dem Verfassen des Blogbeitrags einige wichtige Neuerungen eingeführt:
1. Struktureller Mustervergleich in Python 3.10: Mit Python 3.10 wurde der strukturelle Mustervergleich eingeführt, mit dem man Ausnahmen eleganter behandeln kann, indem man Fehlertypen in einer match
Anweisung abgleicht. Das ist besonders nützlich, wenn du mehrere Ausnahmetypen auf eine lesbarere Weise behandeln willst. Beispiel:
try:
result = 1 / 0
except Exception as e:
match e:
case ZeroDivisionError():
print("You cannot divide by zero.")
case NameError():
print("Variable not defined.")
case _:
print("An unexpected error occurred.")
2. Feinkörnige Fehlerorte in Tracebacks (Python 3.11): Tracebacks in Python 3.11 zeigen jetzt genaue Fehlerstellen an, was die Fehlersuche bei Ausnahmen erleichtert.
- Vor Python 3.11:
value = (1 + 2) * (3 / 0)
- Traceback:
ZeroDivisionError: division by zero
- Python 3.11: Tracebacks zeigen den genauen Unterausdruck an, der die Ausnahme verursacht:
ZeroDivisionError: division by zero
(1 + 2) * (3 / 0)
^
3. Ausnahmegruppen und except*
(Python 3.11): Mit Python 3.11 wurden Ausnahmegruppen eingeführt, um mehrere Ausnahmen in einem einzigen Block mit except*
zu behandeln. Dies ist nützlich für die Verwaltung von asynchronem Code oder Szenarien, in denen mehrere Ausnahmen ausgelöst werden können. Beispiel:
try:
raise ExceptionGroup("Multiple errors", [ValueError("Bad value"), TypeError("Bad type")])
except* ValueError as ve:
print(f"Handling ValueError: {ve}")
except* TypeError as te:
print(f"Handling TypeError: {te}")
4. add_note
Methode für Ausnahmen (Python 3.11): Ausnahmen haben jetzt eine add_note()
Methode, mit der Entwickler eigene Notizen zu Ausnahmen hinzufügen können, um das Debugging zu verbessern. Beispiel:
try:
raise ValueError("Invalid input")
except ValueError as e:
e.add_note("This happened while processing user input.")
e.add_note("Consider validating input before processing.")
raise
- Traceback:
ValueError: Invalid input
Notes:
- This happened while processing user input.
- Consider validating input before processing.
5. PEP 654: Bessere Behandlung von verschachtelten Ausnahmen: Mit Ausnahmegruppen sind verschachtelte Ausnahmen jetzt einfacher zu debuggen und zu behandeln, vor allem in komplexen Workflows wie Multiprocessing oder asynchronen Aufgaben.
Fazit
Beide Unit-Tests und die Behandlung von Ausnahmen sind die wichtigsten Bestandteile der Python-Programmierung, die deinen Code produktionsreif und fehlerfrei machen. In diesem Lernprogramm haben wir etwas über Ausnahmen und Fehler in Python gelernt und wie man sie behandelt. Außerdem haben wir komplexe verschachtelte Try-Except-Blöcke kennengelernt und eigene Ausnahmeblöcke auf der Grundlage von Anforderungen erstellt.
Diese Werkzeuge und Mechanismen sind unverzichtbar, aber der Großteil der Arbeit wird durch einfache try
und except
Blöcke erledigt. try
sucht nach Ausnahmen, die durch den Code ausgelöst werden, und except
behandelt diese Ausnahmen.
Wenn das verwirrend ist und du nicht weißt, wo du anfangen sollst, belege unseren Kurs Einführung in Funktionen in Python, um Scoping, Lambda-Funktionen und Fehlerbehandlung zu verstehen. Du kannst dich auch für den Lernpfad Python-Programmierer/in einschreiben, um deine beruflichen Fähigkeiten zu verbessern und ein/e professionelle/r Python-Entwickler/in zu werden.
Python von Grund auf lernen
FAQs
Was ist der Unterschied zwischen einem Fehler und einer Ausnahme in Python?
Ein Fehler in Python ist in der Regel ein schwerwiegenderes Problem, das verhindert, dass das Programm fortgesetzt wird, z. B. ein Syntaxfehler, der anzeigt, dass die Codestruktur nicht korrekt ist. Eine Ausnahme hingegen ist eine Bedingung, die den normalen Programmablauf unterbricht, aber innerhalb des Programms mit Try-Except-Blöcken behandelt werden kann, so dass das Programm weiter ausgeführt werden kann.
Kannst du mehrere Ausnahmen in einem einzigen try-except-Block abfangen?
Ja, in Python kannst du mehrere Ausnahmen in einem einzigen try-except-Block abfangen, indem du ein Tupel von Ausnahmetypen verwendest. Zum Beispiel: except (TypeError, ValueError):
. Damit wird entweder eine TypeError
oder eine ValueError
im selben Block bearbeitet.
Wie kannst du in Python eine eigene Ausnahme erstellen?
Du kannst eine eigene Ausnahme erstellen, indem du eine neue Klasse definierst, die von der eingebauten KlasseException
erbt . Zum Beispiel:
class MyCustomError(Exception):
pass
Was ist der Zweck des else-Blocks in einer try-except-Struktur?
Der else
Block wird ausgeführt, wenn der try
Block keine Ausnahme auslöst. Er ist nützlich für Code, der nur ausgeführt werden soll, wenn der try
Block erfolgreich ist. So bleibt der Code sauber und die Fehlerbehandlung wird vom normalen Ausführungspfad getrennt.
Warum ist der finally-Block bei der Ausnahmebehandlung wichtig?
Der finally
Block wird immer ausgeführt, unabhängig davon, ob eine Ausnahme ausgelöst wird oder nicht. Sie wird normalerweise für Aufräumaktionen wie das Schließen von Dateien oder die Freigabe von Ressourcen verwendet, um sicherzustellen, dass diese Aktionen unter allen Umständen durchgeführt werden.
Wie kannst du Ausnahmen in Python unterdrücken?
Du kannst Ausnahmen unterdrücken, indem du den contextlib.suppress
Kontextmanager verwendest . Hier kannst du Ausnahmetypen angeben, die ignoriert werden sollen. Zum Beispiel:
from contextlib import suppress
with suppress(FileNotFoundError):
open('non_existent_file.txt')
Was passiert, wenn eine Ausnahme in einem Python-Programm nicht abgefangen wird?
Wenn eine Ausnahme nicht abgefangen wird, wandert sie den Aufrufstapel hinauf, und wenn sie unbehandelt bleibt, beendet sie das Programm und gibt einen Traceback auf der Konsole aus, der zeigt, wo die Ausnahme aufgetreten ist.
Kannst du eine Ausnahme erneut auslösen, nachdem du sie abgefangen hast?
Ja, du kannst eine Ausnahme mit der Anweisung raise
ohne Argumente in einem except
Block erneut auslösen . Dies ist nützlich, wenn du einen Fehler protokollieren oder eine andere Aktion durchführen willst, bevor du die Ausnahme weiterlaufen lässt.
Gibt es eine Möglichkeit, alle Ausnahmen in Python zu behandeln?
Es ist zwar möglich, alle Ausnahmen mit einer bloßen except:
Klausel abzufangen , aber das wird im Allgemeinen nicht empfohlen, weil dadurch unerwartete Ausnahmen abgefangen werden können und die Fehlersuche erschwert wird. Es ist besser, bestimmte Ausnahmen abzufangen oder except Exception:
zu verwenden, um das Abfangen von systembedingten Ausnahmen wie SystemExit
und KeyboardInterrupt
zu vermeiden .
Wie unterscheidest du zwischen einem Syntaxfehler und Laufzeitausnahmen in Bezug auf den Zeitpunkt, an dem sie auftreten?
Syntaxfehler werden beim Kompilieren erkannt, d.h. der Python-Interpreter fängt diese Fehler ab, bevor das Programm ausgeführt wird. Laufzeitausnahmen treten während der Programmausführung auf, wenn der Interpreter auf eine Operation stößt, die er nicht ausführen kann, z. B. Dividieren durch Null oder Zugriff auf eine nicht existierende Variable.
Als zertifizierter Data Scientist ist es meine Leidenschaft, modernste Technologien zu nutzen, um innovative Machine Learning-Anwendungen zu entwickeln. Mit meinem fundierten Hintergrund in den Bereichen Spracherkennung, Datenanalyse und Reporting, MLOps, KI und NLP habe ich meine Fähigkeiten bei der Entwicklung intelligenter Systeme verfeinert, die wirklich etwas bewirken können. Neben meinem technischen Fachwissen bin ich auch ein geschickter Kommunikator mit dem Talent, komplexe Konzepte in eine klare und prägnante Sprache zu fassen. Das hat dazu geführt, dass ich ein gefragter Blogger zum Thema Datenwissenschaft geworden bin und meine Erkenntnisse und Erfahrungen mit einer wachsenden Gemeinschaft von Datenexperten teile. Zurzeit konzentriere ich mich auf die Erstellung und Bearbeitung von Inhalten und arbeite mit großen Sprachmodellen, um aussagekräftige und ansprechende Inhalte zu entwickeln, die sowohl Unternehmen als auch Privatpersonen helfen, das Beste aus ihren Daten zu machen.
Lerne mehr über Python mit diesen Kursen!
Kurs
Intermediate Python
Kurs
Introduction to Importing Data in Python
Der Blog
Die 20 besten Snowflake-Interview-Fragen für alle Niveaus
Nisha Arya Ahmed
20 Min.
Der Blog
Die 32 besten AWS-Interview-Fragen und Antworten für 2024
Der Blog
Top 30 Generative KI Interview Fragen und Antworten für 2024
Hesam Sheikh Hassani
15 Min.