Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung |
Stand: 2024-06-15
weitgehend formuliert von ChatGPT-4o
Exceptions sind Fehler, die während der Laufzeit eines Programms auftreten können. Diese Fehler unterbrechen den normalen Programmablauf und können, wenn sie nicht behandelt werden, zum Absturz des Programms führen. Beispiele für solche Fehler sind:
Exceptions erlauben einen übersichtlicheren Programmcode: Man
schreibt den Programmcode für den Normalfall komplett in ein
try
und dahinter getrennt davon die
Fehlerbehandlung in ein oder mehrere except
. Ohne
Exceptions müsste der Programmcode dagegen bei allen Schritten, die
fehlschlagen können, ein if
mit einer Verzweigung zur
Fehlerbehandlung enthalten, so dass der Normalfall und die
Fehlerbehandlung auf schwer zu lesende Art vermischt wären.
Außerdem erübrigen Exceptions die in C üblichen Fehlercode-Rückgabewerte
von Funktionen, was ebenfalls zur Übersichtlichkeit beiträgt.
Mit dem try
und except
kannst du die Fehler
(Exceptions) abfangen und behandeln, anstatt dass dein Programm
abstürzt. Hier ist ein einfaches Beispiel:
try:
= int(input("Gib eine Zahl ein: "))
zahl = 10 / zahl
ergebnis print(f"Das Ergebnis ist {ergebnis}")
except ZeroDivisionError:
print("Fehler: Division durch Null ist nicht erlaubt!")
except ValueError:
print("Fehler: Bitte eine gültige Zahl eingeben!")
Erklärung:
ergebnis = 10 / zahl
durch Null geteilt werden soll, kommt
das Programm gar nicht mehr dazu, die Variable ergebnis
anzulegen oder zu ändern.ZeroDivisionError
: Dieser Fehler tritt auf, wenn
versucht wird, durch Null zu dividieren.ValueError
: Dieser Fehler tritt auf, wenn die Eingabe
nicht in eine Zahl umgewandelt werden kann.Dem try
und einem oder mehreren except
kann
wahlweise ein finally
-Block folgen. Er wird immer
ausgeführt, unabhängig davon, ob ein Fehler aufgetreten ist und ob er
behandelt worden ist. Dies ist nützlich, um Bereinigungsarbeiten
durchzuführen, z.B. das Schließen von Dateien oder das Freigeben von
Ressourcen.
try:
= open("beispiel.txt", "r")
datei = datei.read()
inhalt print(inhalt)
except FileNotFoundError:
print("Fehler: Datei nicht gefunden!")
finally:
if 'datei' in locals():
datei.close()print("Datei wurde geschlossen.")
Erklärung:
Verwendet man with
zur Arbeit mit Dateien (siehe das
Thema Dateien
im entsprechenden früheren Skript), dann ist das
passende finally
schon eingebaut.
Manchmal möchtest du eigene Fehler definieren und behandeln. Das kannst du mit benutzerdefinierten Exceptions tun.
class UngültigeEingabeError(Exception):
pass
def benutzer_eingabe():
= input('Gib "ja" oder "nein" ein: ').lower()
eingabe if eingabe not in ['ja', 'nein']:
raise UngültigeEingabeError('Ungültige Eingabe! Bitte nur "ja" oder "nein" eingeben.')
return eingabe
try:
= benutzer_eingabe()
antwort print(f'Du hast "{antwort}" eingegeben.')
except UngültigeEingabeError as e:
print(e)
finally:
print('Programm beendet.')
Erklärung:
UngültigeEingabeError
wird definiert. Sie erbt von der in
Python vordefinierten Klasse der allgemeinen
Exception
.benutzer_eingabe
wird mittels raise
die
benutzerdefinierte Exception ausgelöst, wenn die Eingabe nicht jaoder
neinist.
finally
-Block
wird immer ausgeführt.Beachte, dass das raise
typischerweise an einer ganz
anderen Stelle steht als das try ... except
. Sobald ein
Fehler auftritt, also das Programm auf das raise
stößt,
werden der Code in der Funktion benutzer_eingabe
und der Code im try
unmittelbar abgebrochen. Das
Programm springt dann zum passenden except
. Gibt es kein
passendes except
oder ist man sogar in keinem
try
, wird das Programm abrupt beendet (Absturz
).
try
-Block auftreten.try
-Blocks aufgerufen
wird.