Direkt zum Inhalt

Ausnahme- und Fehlerbehandlung in Python

Fehler und Ausnahmen können zu Programmfehlern oder unerwartetem Verhalten führen, und Python verfügt über eine Reihe von robusten Werkzeugen, um die Stabilität des Codes zu verbessern.
Aktualisierte 12. Dez. 2024  · 21 Min. Lesezeit

try except else finally process 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:

  1. AssertionError: Wird ausgelöst, wenn die assert-Anweisung fehlschlägt.
  2. EOFError: Wird ausgelöst, wenn die Funktion input() die Bedingung "Ende der Datei" erfüllt.
  3. AttributeError: Wird ausgelöst, wenn die Zuweisung oder der Verweis eines Attributs fehlschlägt.
  4. TabError: Wird ausgelöst, wenn die Einrückungen aus inkonsistenten Tabulatoren oder Leerzeichen bestehen. 
  5. ImportError: Wird ausgelöst, wenn der Import des Moduls fehlschlägt. 
  6. IndexError: tritt auf, wenn der Index einer Sequenz außerhalb des Bereichs liegt
  7. KeyboardInterrupt: wird ausgelöst, wenn der Benutzer Unterbrechungstasten (Strg + C oder Löschen) eingibt.
  8. RuntimeError: tritt auf, wenn ein Fehler in keine Kategorie fällt. 
  9. NameError: Wird ausgelöst, wenn eine Variable nicht im lokalen oder globalen Bereich gefunden wird. 
  10. MemoryError: Wird ausgelöst, wenn Programmen der Speicher ausgeht. 
  11. ValueError: tritt auf, wenn die Operation oder Funktion ein Argument mit dem richtigen Typ, aber dem falschen Wert erhält. 
  12. ZeroDivisionError: Wird ausgelöst, wenn du einen Wert oder eine Variable durch Null teilst. 
  13. SyntaxError: Wird vom Parser ausgelöst, wenn die Python-Syntax falsch ist. 
  14. IndentationError: tritt auf, wenn eine falsche Einrückung vorliegt.
  15. 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.  

  1. Führe den Code unter der Anweisung try aus.
  2. 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. 

try except-Anweisung in Python

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. 

try with else clause in Python

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.

finally-Schlüsselwort in Python

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 Funktion open().
  • 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"

Dateibearbeitung im Arbeitsbereich

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)

Bildschirmfoto zur Dateibearbeitung im Arbeitsbereich

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

Beherrsche Python für Data Science und erwerbe gefragte Fähigkeiten.
Kostenloses Lernen beginnen

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.


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

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.

Themen

Lerne mehr über Python mit diesen Kursen!

Kurs

Introduction to Python

4 hr
5.9M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

See MoreSee More