Seite 1 von 1
try für mehre öffnende Dateien
Verfasst: Samstag 13. Februar 2010, 04:09
von mit
Hallo,
Wie kann am einfachsten eine exception für mehre zu öffnende Datei bauen, so dass wenn eine von diesen nicht existiert eine exception ausgelöst wird und der Dateiname angezeigt wird welcher nicht existiert.
Code: Alles auswählen
try:
f = open(f1, 'r')
f = open(f2, 'r')
f = open(f3, 'r')
except IOError:
print 'cannot open', Dateiname
Viele Grüße
Re: try für mehre öffnende Dateien
Verfasst: Samstag 13. Februar 2010, 08:05
von numerix
mit hat geschrieben:Wie kann am einfachsten eine exception für mehre zu öffnende Datei bauen, so dass wenn eine von diesen nicht existiert eine exception ausgelöst wird und der Dateiname angezeigt wird welcher nicht existiert.
Du kannst über eine Liste mit den Dateinamen iterieren.
Re: try für mehre öffnende Dateien
Verfasst: Samstag 13. Februar 2010, 10:29
von gerold
Hallo mit!
Code: Alles auswählen
try:
open("uuu", "r")
except IOError, err:
print err
print err.args
print err.errno
print err.filename
print err.strerror
mfg
Gerold

Verfasst: Samstag 13. Februar 2010, 11:53
von cofi
Warum benoetigst du denn 3 offene Dateien gleichzeitig? Daneben ist die Datei nicht öffnen zu können nicht die einzige Quelle für `IOError`s (in dem Fall schon, aber du willst ja wohl auch etwas mit den Dateien machen).
Da deine Dateien nicht geschlossen werden noch der Verweis auch `contextlib.nested` und `with`.
Verfasst: Samstag 13. Februar 2010, 12:40
von sma
Einfach Python 3.x (oder 2.7) benutzen:
Andernfalls die Anweisungen (sei es nun `with` oder `try/finally`) passend schachteln. Ich sehe nicht, wo da ein prinzipielles Problem ist.
Stefan
Verfasst: Samstag 13. Februar 2010, 12:47
von lunar
In Python 2.5 und 2.6 kann man stattdessen "contextlib.nested()" verwenden.
Verfasst: Samstag 13. Februar 2010, 12:49
von numerix
cofi hat geschrieben:Warum benoetigst du denn 3 offene Dateien gleichzeitig?
So wie ich es verstanden habe, müssen nicht unbedingt mehrere Dateien
gleichzeitig geöffnet werden (auch wenn der Code das so zeigt), sondern es ging darum, vor der Verwendung der Dateien zu prüfen, ob alle im weiteren Verlauf benötigten Dateien überhaupt vorhanden sind.
Dazu würde es ja genügen, einmal über die Liste aller Dateinamen zu iterieren und festzustellen, ob diese Dateien zum Lesen geöffnet werden können. (Und dann auch brav wieder schließen).
Verfasst: Samstag 13. Februar 2010, 13:21
von cofi
numerix hat geschrieben:So wie ich es verstanden habe, müssen nicht unbedingt mehrere Dateien gleichzeitig geöffnet werden (auch wenn der Code das so zeigt), sondern es ging darum, vor der Verwendung der Dateien zu prüfen, ob alle im weiteren Verlauf benötigten Dateien überhaupt vorhanden sind.
Das war eigentlich eher rhetorisch gemeint. Ich wollte den OP mit der Nase darauf stossen, dass das recht selten nötig ist.
Um mal einen anderen Ansatz einzuwerfen: Es gibt `os.path.exists` zusammen mit `filter` liesse sich die Anzahl der Dateien auf die gültigen eingrenzen (oder eben auf das Gegenteil).
Verfasst: Samstag 13. Februar 2010, 13:33
von numerix
cofi hat geschrieben:Um mal einen anderen Ansatz einzuwerfen: Es gibt `os.path.exists` zusammen mit `filter` liesse sich die Anzahl der Dateien auf die gültigen eingrenzen (oder eben auf das Gegenteil).
Wobei er dann aber noch nicht sicher sein kann, ob die benötigten Zugriffsrechte vorhanden sind ...