Seite 1 von 1

IO_Error unter Windows

Verfasst: Montag 21. Oktober 2002, 23:50
von Dookie
Hallo,

ich habe gerade einem bekannten geholfen ein Pythonscript zu erstellen. Dabei kam eine sehr seltsame Fehlermeldung alledings nur bei Ihm unter Windows in folgender Funktion:

Code: Alles auswählen

def write_Headerfile(name, lines):
    f = open(savepath+name, "w")
    for line in lines:
        f.write(inverse_str4s(line))
    f.close()
dabei kommt "IO_Error: io_operation on closed File" oder so ähnlich, nachdem alle Zeilen geschrieben wurden.

Auf Verdacht haben wir es mit folgender Änderung versucht:

Code: Alles auswählen

def write_Headerfile(name, lines):
    f = open(savepath+name, "w")
    for line in lines:
        if line: f.write(inverse_str4s(line))
    f.close()
so funktioniert das Ganze auch unter Windows ohne Fehlermeldung.

Die Zeilen werden vorher mit readlines() aus einer Datei gelesen, und die Funktion inverse_str4s modifiziert beim Finden von bestimmten Inhalten diese Inhalte, hat also auch nichts mit Ein/Ausgabe zu tun.

Hat vielleicht irgendwer eine Erklährung oder ist das ein winspezifisches Problem?


Gruß

Dookie

Re: IO_Error unter Windows

Verfasst: Dienstag 22. Oktober 2002, 08:10
von Voges
Hallo!
Dookie hat geschrieben:

Code: Alles auswählen

def write_Headerfile(name, lines):
    f = open(savepath+name, "w")
    for line in lines:
        f.write(inverse_str4s(line))
    f.close()
dabei kommt "IO_Error: io_operation on closed File" oder so ähnlich, nachdem alle Zeilen geschrieben wurden.
Vieleicht hilft ein flush() vor'm close(). Mache ich zumindest immer.

Jan

Verfasst: Dienstag 22. Oktober 2002, 09:12
von RicmanX
Ich denk mal das liegt an der anderen Funktion.

Du schreibst etwas direkt von ner Funktionsausgabe in ne Datei, unter Python2.2 sind (glücklicherweise wie ich finde) Lokale und Globale Sachen nicht so sehr getrennt, dadurch passiert's wahrscheinlich das beide Dateien geschlossen werden mit dem close() in der anderen Funktion. Falls du da die File Variable auch mit f betitelt hast wärs garnicht mehr verwunderlich.

Für die andere Funktion ginge event. um diesen Fehler zu umgehen ebenfalls:

Code: Alles auswählen

in = open("auslesen.txt", "r").readlines()
Das öffnet, führt aus und schließt sofort.

Ric