Exception Handling und Dateiverarbeitung in Python

Ziel ist es in erster Linie Code und Daten in diesem Schritt zu trennen. Wir wollen das Ganze in Textdateien auslagern und somit ein Programm entwickeln, welches uns die Daten aus einer Textdatei lädt. Dazu liefere ich hier die Grundfunktionen, die dazu Nötig wären.

Dateiverwaltung

Die Daten müssen nun aus der Textdatei ausgelesen werden, die sich im selben Ordner wie unser Script befindet und „infos.txt“ heißt.

Zum öffnen der Datei geben wir folgendes in unserem Script an:

datei = open("infos.txt")

Unsere Datei liegt nun in der Variable „datei“. Nun können wir die Datei Zeile für Zeile auslesen.

zeile = datei.readline()

Mit dem Befehl „.readline()“ lesen wir jede Zeile einzeln aus der Datei aus. Diese werden in einer Liste abgelegt und lassen sich bequem mit einer „for-Schleife“ austauschen.

Nun muss die Datei natürlich noch geschlossen werden. Dies machen wir mit folgendem Befehl:

datei.close()

Damit wir Dateien verarbeiten können müssen wir folgendes in unser Script importieren:

import os

Im Modul „os“ sind alle nötigen Funktionen für die Dateiverarbeitung enthalten.

Wichtige Befehle für das Arbeiten mit Dateien und Verzeichnissen:

  • os.getcwd() => Liefert das aktuelle Verzeichnis (Start im Python34 – Ordner)
  • os.chdir(‚Ordner‘) => Wechselt das Verzeichnis zum angegebenen Ordner (In den Unterordner)
  • os.chdir(„\“) => Wechselt ins root (Oberste) Verzeichnis
  • os.chdir(„..“) => Geht in der Ordnerstruktur eine Ebene höher (In den Übergeordneten Ordner)
  • os.chdir(„Ordner/Unterordner“) => Wechselt sofort in den angegebenen Ordner
  • datei = open(„Dateipfad/datei.txt“) => Öffnet die angegebene Datei
  • datei.seek(„Wert“) => Sprint an das Zeichen mit der Nummer $Wert
  • datei.seek(0) => Springt an das 0. Zeichen und somit an den Anfang der Datei
  • for Zeile in Datei
    print (zeile)
    => Gibt uns jede Zeile aus der Datei einzeln aus. (Komplette Datei)
  • datei.close() => Schließt Datei

Wir wollen nun die eingelesenen Zeilen Splitten und in eigene Variablen packen. Dazu benutzen wir folgenden Befehl:

(varibale1, variable2) = zeile.split(":")

Der Befehl „.split(„:“)“ zerlegt unsere Variable an allen „:“ und gibt uns daraus eine Liste. Diese wird dann zu den Variablen vor dem „=“ kombiniert. Der „.split()“ Befehl alleine gibt uns eine Liste aus, mit „(variable1, variable2)“ können wir dem ganzen Variablen zuweisen und wir bekommen 2 Variablen zurück anstelle einer Liste. Dies funktioniert allerdings nur, wenn wir genau wissen das die Liste die aus „.split()“ resultiert, genau 2 Elemente hat. (In unserem Beispiel)

Im nächsten Beispiel fügen wir zwischen die Ausgabe der beiden Variablen, noch einen Text:

for line in datei:
    (s,t) = line.split(":")
    print(s + " sagt " + t)

Im Befehl „.split()“ lässt sich ein weiterer Parameter angeben, der angibt, wie oft gesplittet werden soll: „split(„string“, 2)“
In diesem Fall wird genau 2 mal gesplittet. Der Wert lässt sich natürlich gegen einen beliebigen Wert austauschen. Standardmäßig steht der Wert auf „-1“, was bedeutet, das unendlich oft gesplittet wird.

Exceptions

Es gibt 2 Möglichkeiten. Entweder verhindert man Fehler anhand von mehr Logik im Programm oder man versucht es und fängt den Fehler anhand von Exeption Handling ab. Die Fehler, die zu Laufzeiten auftreten, nennt man „Exceptions“.

Der Nachteil von mehr Logik ist natürlich, das man mit Logik immer nur einen Fehler verhindern kann. Es kann immer noch Fehler geben, die man vorher noch gar nicht gesehen hat. Hier sind Exceptions besser, da diese alle Fehler abfangen, egal ob man diese vorher kannte oder nicht. Weiter Logik führt zum einen dazu, das das Programm Fehleranfälliger wird und zum anderen dazu, das der Code unnötig komplexer wird. Außerdem verschwimmt das Ziel, bzw das gewünschte Verhalten und es durch den komplexeren Code nicht mehr absehbar, was das eigentliche Ziel war.

Die alternative Möglichkeit ist die Verarbeitung von Ausnahmen, dem Exception Handling. Das Exception Handling probiert Befehle aus und schaut nach ob diese funktionieren. Wenn diese nicht funktionieren wird eine Fehlermeldung ausgegeben. Voraussetzung dafür ist, das man weiß, welcher Code eventuell Fehler auswerfen könnte. Es ist also vorausgesetzt, problematischen Code zu erkennen (Öffnen von Internetseiten, Benutzereingaben etc.).

Exeption Handling macht nun folgendes: Wenn ein Fehler bei der Codeausführung ausgeworfen wird, wird das Skript nicht abgebrochen sondern gibt lediglich eine definierte Fehlermeldung zurück. Dies erinnert an eine if-else Anweisung.

Folgender Programmcode muss zum probieren eines Codeteils angegeben werden:

try:
    // Kritischer Programmcode
except:
    // Fehlerbehebung/Fehlermeldung

Mit „try:“ wird ein Programmcode ausprobiert, wenn dieser fehlschlägt und eine Fehlermeldung liefert (z.B. Internetseite offline, Textdokument zum öffnen nicht gefunden …), wird der „except:“ Teil ausgeführt.

Nun zu einem konkreten Beispiel:

try:
    datei = open("infos.txt")        // Kritischer Code
except:
    print ("Datei nicht gefunden.")  // Fehlerbehandlung/Fehlermeldung

In diesem Beispiel, welches ich von weiter oben einfach erweitert habe, wird eine Textdatei geöffnet. Wenn diese Textdatei nicht gefunden wurde, wird „Datei nicht gefunden“ ausgegeben. Das Programm wird in diesem Fall einfach weiter ausgeführt und beendet sich somit nicht, nur weil der Fehler aufgetreten ist. Um bei „except:“ einfach nicht passieren zu lassen, muss in die Zeile einfach „pass“ geschrieben werden.

try:
    datei = open("infos.txt")        // Kritischer Code
except:
    pass                             // Macht einfach nichts und überspringt

Man sollte Logik nur für das gewünschte Verhalten schreiben und Fehler einfach mit Exception Handling auswerten, filtern und eventuell auch vermeiden, da der Code sonst zu komplex und unübersichtlich wird. Exeption Handling hingegen hält den Code übersichtlich und vermindert die Komplexität gegenüber Logik.

Marvin Sengera

Marvin Sengera

Hey! Ich bin Marvin Sengera, Inhaber der Internetagentur "Binärfabrik" aus Paderborn. Ich habe mein Bachelorstudium Informatik mit Schwerpunkt Industriespionage an der Hochschule Hamm Lippstadt abgeschlossen und absolviere derzeit meinen Master in Fachrichtung "Technical Entrepreneurship and Innovation". Ich beschäftige mich rund um die Themen Informatik, Innovation & Unternehmensgründung.

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.