Seite 1 von 1

try-Fehlerbehebung

Verfasst: Samstag 11. November 2017, 23:43
von 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!

Re: try-Fehlerbehebung

Verfasst: Sonntag 12. November 2017, 00:09
von 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

Re: try-Fehlerbehebung

Verfasst: Sonntag 12. November 2017, 00:22
von Sophus
@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