seltsames Problem mit file.open()

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
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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ß
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

Hi Blubber!
blubber hat geschrieben:die Exception gibt mir eine 0 zurück.
Welche Exception wird denn geworfen?

GnuShi
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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?
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

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
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Du könntest dir ein

Code: Alles auswählen

print os.path.abspath("test.ini")
einbauen und vergleichern....
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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...
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

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 ;)
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

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 :)
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

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.
blubber
User
Beiträge: 123
Registriert: Montag 19. März 2007, 09:08

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!
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Dann poste doch mal den Quelltext :P
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

pudeldestodes hat geschrieben:Dann poste doch mal den Quelltext :P
... und überschreibe bitte nicht das Python-Objekt ``file``.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten