try-Fehlerbehebung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
jake-the-snake

Abend Leute

Einen hät' ich noch für heute - dann ist aber auch gut :wink:

Es folgt mein Versuch, eine Fehlerabfrage bei einer Open-Anweisung ein zu bauen:

Code: Alles auswählen

try:
   # Datei zum Lesen oeffnen und am Ende schliessen
   usbfh = open(usbpath, "r")

except IOError:
    print("Datei nicht lesbar!")
    

else:
    # Datei einlesen, wenn kein Fehler augetreten ist:
    for line in usbfh:
        print(line.rstrip())

finally:
    # Diese Anweisung in jedem Fall ausführen:
    usbfh.close()
Laut Anleitung von der Pythonseite, sollte der Open-Befehl ausgeführt werden - Das klappt!
Jetzt habe ich die zu öffnende Datei für Test-Zwecke umbenannt, um einemn Fehler zu erzeugen - Das klappt auch!
Zeile 6 wird auch noch ausgeführt und der Fehler im Terminal ausgegeben - Das klappt ebenso!

Warum wird jetzt Zeile 9 (else) ausgeführt, obwohl except einen Fehler meldete?
Kann ich in Zeile 7 das Programm enden lassen, oder irgendwie in Zeile 14 springen? (goto geht ja leider nicht)

Und sollte finally nicht in jedem Fall ausgeführt werden?

Gruß jts

Nachtrag:
Habe das vergessen :oops: :

Code: Alles auswählen

except FileNotFoundError:
    print("Datei nicht gefunden!")
Aber else wird immer noch ausgeführt!
jake-the-snake

Abend Leute

Ok, jetzt läuft das Mini-Script:

Code: Alles auswählen

try:
   # Datei zum Lesen oeffnen und am Ende schliessen
   usbfh = open(usbpath, "r")

except FileNotFoundError:
    print("Datei nicht gefunden!")

except IOError:
    print("Datei nicht lesbar!")
    

else:
    # Datei einlesen, wenn kein Fehler augetreten ist:
    for line in usbfh:
        print(line.rstrip())
    usbfh.close()
Der Fehler war, wenn Datei nicht geöffnet werden kann, war usbfh nicht befüllt/definiert.
Der zweite Denkfehler war, was nich geöffnet werden kann, braucht man natürlich auch nicht zu schließen. :oops:

Gute Nacht zusammen...

jts
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@jake-the-snake: Wenn man mit Dateien arbeitet, dann sollte man zur with-Anweisung greifen. Denn dort braucht man sich nicht um das Schließen der Datei kümmern - wird automatisch nach dem Verlassen des with-Korpus geschlossen.

Code: Alles auswählen

with open('file_name.txt', 'r') as file_handler:
    # do something with data object
# here the file has been closed successfully
Antworten