Programmieren für Ingenieure

Exceptions Fehlerhandhabung in Python

In dieser Lektion möchte ich dir zeigen wie du mit Exceptions – also Programm Abstürzen in Python umgehen kannst um die Ausführung deiner Programme zu stabilisieren und wichtige Informationen zu sammeln.

Immer wenn dein Programm mit einem kritischen Fehler abstürzt wird eine Exception -oder in gut Deutsch – Ausnahme geworfen.
Diese enthält Informationen darüber, warum das Programm abgestürzt ist.

Um diese wichtigen Informationen nicht zu verlieren kannst du deinen Code in einem try: Block schreiben und in einem darauffolgenden except: Block festlegen wie du mit der Exception umgehen möchtest.
Ein übersichtliches Beispiel dafür findest du in der ExceptionsFehlerhandhabung.py Datei:

def TestFunktion(variable1, variable2):
    try:
        print(„Test Funktion wir ausgeführt.“)
        print(int(variable1 / variable2))

    except TypeError as ex:
        print(ex)
    except Exception as ex:
        print(ex)

    finally:
        print(„Code der immer ausgeführt wird, unabhängig davon ob Exception ausgelöst wurde oder nicht.“)


Im Fall der TestFunktion von oben wird nun der Code innerhalb des try: Block ausgeführt.
Wenn es keine Probleme gibt werden die anschließenden except: Blöcke übersprungen.

TestFunktion(10, 2)

### ERGEBNIS / AUSGABE ###
Test Funktion wir ausgeführt.
5
Code der immer ausgeführt wird, unabhängig davon ob Exception ausgelöst wurde oder nicht.


Solle es innerhalb des try: Blocks zu einem kritischen Fehler kommen, stürzt dein Programm nicht einfach ab, sondern springt zum ersten except: Block.
Es gibt verschiedene Fehler die häufig auftreten und deshalb einen eigenen Exception Typ haben.

TestFunktion(1, None)

### ERGEBNIS / AUSGABE ###
Test Funktion wir ausgeführt.
unsupported operand type(s) for /: ‚int‘ and ‚NoneType‘
Code der immer ausgeführt wird, unabhängig davon ob Exception ausgelöst wurde oder nicht.


Du kannst mehrere except: Blöcke nacheinander verwenden, um zuerst spezifische Fehler abzufangen, die du schon erwartest und am Ende einen allgemeinen Block anhängen, der alle sonstigen Fehler auffängt.

TestFunktion(1, 0)

### ERGEBNIS / AUSGABE ###
Test Funktion wir ausgeführt.
division by zero
Code der immer ausgeführt wird, unabhängig davon ob Exception ausgelöst wurde oder nicht.


Innerhalb des except: Blocks kannst du dann entscheiden wie du mit dem Fehler umgehen möchtest.
Um Fehler besser nachvollziehen zu können ist es immer empfehlenswert möglichst viele Informationen in einem Logfile zu speichern.

Nach deinem except: Block kannst du bei Bedarf einen finally: Block ergänzen.
Der darin enthaltene Code wir immer ausgeführt werden, unabhängig davon ob innerhalb des try: Blocks ein Fehler aufgetreten ist oder nicht.
An dieser Stelle kannst du zum Beispiel Dateien schließen oder offene Verbindungen trennen.

Eine einfache aber trotzdem schon extrem hilfreiche Implementierung der Exception Funktionalitäten findest du in der DatenProzessieren_4.py Datei.
Hier ist der größte Teil des Codes einfach in einen try: Block gefasst und in einem allgemeinen except: Block wird die Information der Exception im Fehlerfall im logfile gespeichert.
Das ermöglicht es dir im Nachhinein nachzuvollziehen warum dein Programm abgestürzt ist und deinen Code zu verbessern.

Vor allem in den ersten Tagen und Wochen, in denen dein Programm in der Praxis eingesetzt wird wirst du auf diese Weise vermutlich noch viele Fehler entdecken können an die du während der Entwicklung noch nicht einmal gedacht hast.
Fehler auf diese Weise zu beheben deutet übrigens nicht darauf hin, dass du einen schlechten Job bei der Entwicklung gemacht hast, sondern ist ein so alltäglicher Bestandteil des Programmierens, dass es dafür ein eigenes Wort gibt: Buxfixing.
Fehlerbehebung dieser Art und das hinzufügen neuer Funktionalitäten sind zum Beispiel der Grund dafür warum sich mehrmals täglich irgendwelche die Programme auf deinem Smartphone (Apps) updaten und es regelmäßig neue Software Versionen für fast alle Programme auf deinem Rechner gibt.

Wenn du das Prinzip von Exceptions verstanden hast und es geschafft hast an deinem eigenen Rechner zu testen wie du sie abfangen und auswerten kannst, dann möchte ich dir an dieser Stelle herzlich zum nächsten erfolgreichen Schritt gratulieren und freue mich schon darauf dich gleich in der nächsten Lektion wiederzusehen =)

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.