Erste Ausnahme details in Python
Muss ich öffnen & schreiben bis zu 10 verschiedene Dateien, die alle innerhalb der gleichen Schleife.
e.g:
for i in range(0,10):
try:
a=5
file1 = open("file1.txt",'w+')
file2 = open("file2.txt",'w+')
#... etc
print(str(a),file=file1)
print(str(a)+"hi",file=file2)
# ... etc
except:
#error handling
Nun, was ich tun möchte, ist in der Lage, um spezifische Informationen über die Ausnahme wie welche Datei wurde geöffnet/geschrieben werden, um innerhalb der Allgemeinen Ausnahme. Von meinem jetzigen Verständnis würde ich haben, so etwas zu tun, um zu erreichen, was ich will:
for i in range(0,5):
a=5
try:
file1 = open("file1.txt",'w+')
print(str(a),file=file1)
except:
#error handling for file1
try:
file2 = open("file2.txt",'w+')
print(str(a)+"hi",file=file2)
except:
#error handling for file2
..., Die gehen, um extrem klobig und unattraktiv, wenn ich tun Sie dies für etwa 10 unterschiedliche Dateien. Gibt es eine Möglichkeit, um (beispielsweise) die mit dem Namen info, aus der eine Allgemeine Ausnahme wie in meinem ersten Beispiel? Im Grunde also die Ausnahme könnte Dinge berichten wie "Fehler beim schreiben in Datei 1" ohne try/außer speziell für Datei1 Operationen.
edit: Dies ist eine massive Vereinfachung, die Daten in die Datei geschrieben. str(a) str(a)+"Hallo" sind nicht wirklich gute Darstellungen der Daten tatsächlich geschrieben; Datei1 müssen möglicherweise eine Feste ganze Zahl, wo Datei2 müssen möglicherweise ein string, formatiert mit mehreren Variablen. zu verallgemeinern das öffnen/schreiben-Prozess in einer Schleife nicht zu funktionieren sehr schön.
InformationsquelleAutor user891876 | 2013-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
sys.exc_info
, um Informationen über die Ausnahme, die derzeit bearbeitet werden, einschließlich der Ausnahme-Objekt selbst. EinIOError
Ausnahme enthält alle Informationen, die Sie benötigen, einschließlich der Dateinamen, die errno, und eine Zeichenfolge, die den Fehler beschreibt:Ausführung in der
try
block wird offensichtlich immer noch Stillstand, nachdem die erste Ausnahme.InformationsquelleAutor Cairnarvon
Verwenden Sie die traceback Modul:
InformationsquelleAutor rstackhouse
Erwähnst du mit einem loop, aber du bist nicht wirklich mit einer Schleife. Eine Schleife verwenden. Auf diese Weise können Sie schreiben, jede Datei ein zu einer Zeit, in einem einzigen
try
block. Sie scheinen nicht zu werden, etwas zu tun mit den Dateien, außer schreiben, die einen Wert für jeden, so dass Sie nicht brauchen, um alle zu öffnen.Edit: Wenn Sie völlig unterschiedliche Dinge zu schreiben, um die verschiedenen Dateien, erstellen Sie ein Wörterbuch oder andere Daten-Struktur, die vor der Zeit der Speicherung der Zuordnung zwischen Dateien und Daten, verwenden Sie dann in der Schleife.
Siehe meine bearbeitete Antwort. Vereinbaren Sie die Beziehung zwischen Dateien und Daten, dann schreiben Sie jedes Stück von Daten in die zugehörige Datei in der Schleife.
was, wenn ich nicht drucken möchten datei3 if length(str(a)+str(b))>5? jede Datei braucht definitiv seine eigene Logik.
Dann, in der Vorberechnung setzen Sie die leere Zeichenfolge als Wert für
file3
in diesem Fall. Oder Sie könnten eine einfache Prüfung in der Schleife für ein "nicht schreiben" - Wert, wie noch Keiner und Keine in der die vorberechneten Werte. Der Punkt ist, dass können Sie entscheiden, was Sie gehen zu schreiben, um jede Datei, bevor Sie beginnen, öffnen Sie die Dateien.Generell, je komplizierter die Logik ist für die Entscheidung, was zu tun ist mit jeder Datei, desto weniger können Sie vermeiden, "klobig" - code. Wenn Sie versuchen, zu tun 10 völlig verschiedene Sätze, komplizierte Operationen zu 10 Dateien, das ist nicht eine operation, es ist 10 Operationen, und Sie können nicht erwarten, in der Lage sein, um Sie alle auf einmal. So viel wie möglich, obwohl, sollten Sie die klobigen Teil, bevor Sie die Dateien öffnen, weil das hilft für die separate Logik-Fehler in der Erstellung der Daten (unter Ihrer Kontrolle) von der I/O Fehler beim schreiben der Daten (die nicht unter Ihrer Kontrolle).
InformationsquelleAutor BrenBarn
Bei der Verwendung
exc_type, value, exc_traceback = sys.exc_info()
beachten Sie, dass der Dateiname generiert, dass die Ausnahme, die durch die folgende:InformationsquelleAutor ranaalisaeed