Seite 1 von 1

seltsames Problem mit file.open()

Verfasst: Freitag 29. Februar 2008, 14:38
von blubber
Hi,

hab ein seltsames Problem was ich üerhaupt nicht verstehe, vielleicht kann mir ja jemand weiterhelfen. Und zwar:

Ich hab Funktion1:
Diese öffnet SCHREIBEND eine Datei X.

Code: Alles auswählen

try:
   file = open("test.ini",'w')
   #Do irgendwas
   file.close()
   return 1
except:
   return 0
Und ich hab eine Funktion2:
Diese öffnet LESEND die gleiche Datei X.

Code: Alles auswählen

try:
   file = open("test.ini",'r')
   #Do irgendwas
   file.close()
   return 1
except:
   return 0
Ich kann über jeweils einen Button in einer GUI die Funktionen getrennt voneinander aufrufen. Ich kann beliebig oft Funktion 2 (!!) aufrufen. Sobald ich aber einmal Funktion 1 aufrufe, und danach Funktion 2 (also wieder lesend öffnen), funktioniert dies nicht, sprich, die Exception gibt mir eine 0 zurück.
Wieso geht das nicht? Es wird brav in beiden Funktionen die Datei mir file.close() wieder geschlossen, aber warum kann ich die Datei dann nicht lesend aufrufen, sobald diese einmalig schreiben aufgerufen wurde?

Gruß

Re: seltsames Problem mit file.open()

Verfasst: Freitag 29. Februar 2008, 14:43
von Gnushi
Hi Blubber!
blubber hat geschrieben:die Exception gibt mir eine 0 zurück.
Welche Exception wird denn geworfen?

GnuShi

Verfasst: Freitag 29. Februar 2008, 14:44
von Zap
Erstmal ein kurzer Hinweis, file ist eine built-in Methode. Besser nicht überschreiben.

Du kannst dir die Frage am besten selber beantworten indem du den Tryblock um die beiden geschichten wegnimmst und dir mal anguckst was für eine exception kommt.
Man sollte nur in seltenen Fällen try: except: ohne konkrete benennung der Exception nutzen. Es heist ja schließlich Ausnahmebehandlung ;)

Ich denke mal das dir die exception weiterhelfen wird.
Sonst melde dich nochmal.

Verfasst: Freitag 29. Februar 2008, 14:56
von blubber
Hi,

also ich hab das Exception Zeugs mal weggemacht.
Nach wie vor kann ich so oft ich möchte Funktion2 aufrufen. Sobald ich einmalig (oder mehrmalig) Funktion1 und anschliessend nochmal Funktion2 aufrufe bekomme ich

IOError: No such files or directory: 'test.ini'

Warum kennt er plötzlich die Datei nichtmehr?

Verfasst: Freitag 29. Februar 2008, 15:12
von Gnushi
blubber hat geschrieben:IOError: No such files or directory: 'test.ini'
Warum kennt er plötzlich die Datei nichtmehr?
Wechselst Du zwischenzeitlich das Verzeichnis? Löscht Du die Datei versehentlich?

GnuShi

Verfasst: Freitag 29. Februar 2008, 15:18
von blubber
Hi,

nein, der Pfad wird nicht gewechselt und ich lösche auch nicht die Datei.
In Funktion2 wird ausschliesslich versucht sie lesend zu öffnen, mehr nicht.
In Funktion1 werden ausschliesslich Zeilen hineingeschrieben.
Der Pfad ist immer der gleiche...auch meine Datei ist immer da...Funktion1 kann ich ja beliebig oft aufrufen. Ohne Probleme.

Verfasst: Freitag 29. Februar 2008, 15:25
von Zap
Du könntest dir ein

Code: Alles auswählen

print os.path.abspath("test.ini")
einbauen und vergleichern....

Verfasst: Freitag 29. Februar 2008, 15:28
von blubber
Hi Zap,

hab ich gemacht. Er gibt mir beides mal den gleichen, korrekten Pfad zur test.ini an :cry:
Ich verstehs net.....Kann ja fast nur ein Bug in Python selbst sein...

Verfasst: Freitag 29. Februar 2008, 15:34
von Zap
blubber hat geschrieben:Ich verstehs net.....Kann ja fast nur ein Bug in Python selbst sein...
Na das will ich mal schwer bezweifeln.
Wäre es vielleicht nicht schlecht wenn du den ganzen Code zeigen könntest.
Da muss irgendwo ein löschen oder ähnliches passieren, ich kann es mir nicht anders erklären.
Auch wenn ich es in diesem Fall für unwahrscheinlich halte, wenn du IDLE benutzt: Einmal schließen und neu starten. Das wirkt manchmal wunder ;)

Verfasst: Freitag 29. Februar 2008, 17:27
von Markus12
ja das kann ich nur bestätigen^^

Bevor ich Scripte ausgiebig teste beende ich alle Pythonprozesse, da ansonsten variablen gespeichert werden und es öfters zu Fehlern kommt...

Ja besser ganzen Code, irgendwo wird der Fehler liegen :)

Verfasst: Freitag 29. Februar 2008, 20:36
von pudeldestodes
blubber hat geschrieben:Funktion1 kann ich ja beliebig oft aufrufen. Ohne Probleme.
Naja, open('test.ini', 'w') ist es vollkommen egal, ob die Datei existiert oder nicht. Wenn nicht, wird versucht sie anzulegen.

Code: Alles auswählen

os.path.exists('test.ini')
könnte dir vielleicht helfen um mal zu schauen wo dir die Datei abhanden kommt.

Verfasst: Montag 3. März 2008, 08:08
von blubber
Also mein aktueller Code besteht eigentlich nurnoch aus den beiden Funktionen und der jeweilige Read / Write Aufruf von test.ini, inklusive dem file.close() noch.
Ich kann ja über den Dateiexplorer schauen, ob die test.ini "abhanden" kommt während dem rumgemache, aber die ist ständig vorhanden!

Verfasst: Montag 3. März 2008, 15:55
von pudeldestodes
Dann poste doch mal den Quelltext :P

Verfasst: Montag 3. März 2008, 16:02
von gerold
pudeldestodes hat geschrieben:Dann poste doch mal den Quelltext :P
... und überschreibe bitte nicht das Python-Objekt ``file``.

mfg
Gerold
:-)