Beachten Sie bei der Verwendung von exc_type, value, exc_traceback = sys.exc_info()
, dass der Dateiname, der die Ausnahme generiert hat, wie folgt abgerufen werden kann:
Ich muss öffnen & amp; Schreibe in etwa 10 verschiedene Dateien, die alle innerhalb derselben Schleife liegen. z.B.:
%Vor%Nun möchte ich in der Lage sein, spezifische Ausnahmeinformationen zu erhalten, beispielsweise welche Datei geöffnet / geschrieben wurde innerhalb der allgemeinen Ausnahme. Nach meinem derzeitigen Verständnis müsste ich etwas tun, um zu erreichen, was ich will:
%Vor%... Das wird extrem klobig und unattraktiv, wenn ich das für etwa 10 verschiedene Dateien machen muss. Gibt es eine Möglichkeit, die Dateiname-Information aus einer allgemeinen Ausnahme wie in meinem ersten Beispiel zu erhalten? Grundsätzlich könnte die Ausnahme Dinge wie "Fehler beim Schreiben in Datei1" ohne einen Versuch / außer speziell für Datei1 Operationen melden.
edit: Dies ist eine massive Vereinfachung der Daten, die in die Datei geschrieben werden. str (a) und str (a) + "hi" sind keine wirklich guten Darstellungen der tatsächlich geschriebenen Daten; file1 benötigt möglicherweise eine fest codierte Ganzzahl, wobei Datei2 möglicherweise eine Zeichenfolge benötigt, die mit mehreren Variablen formatiert ist. den Öffnungs- / Schreibprozess in eine Schleife zu verallgemeinern wird nicht sehr gut funktionieren.
Sie können sys.exc_info
verwenden, um Informationen über die momentan behandelte Ausnahme zu erhalten einschließlich des Ausnahmeobjekts selbst. Eine IOError
-Ausnahme enthält alle Informationen, die Sie benötigen, einschließlich des Dateinamens, des Errno und einer Zeichenfolge, die den Fehler beschreibt:
Die Ausführung im Block try
wird offensichtlich nach der ersten Ausnahme noch anhalten.
Sie erwähnen die Verwendung einer Schleife, aber Sie verwenden keine Schleife. Benutze eine Schleife. Auf diese Weise können Sie jede Datei einzeln in einen einzelnen try
-Block schreiben. Sie scheinen nichts mit den Dateien zu tun, außer dass Sie jeweils einen Wert schreiben, sodass Sie sie nicht alle offen halten müssen.
Bearbeiten: Wenn Sie sehr unterschiedliche Dinge zum Schreiben in die verschiedenen Dateien haben, erstellen Sie vorher ein Wörterbuch oder eine andere Datenstruktur, speichern Sie die Zuordnung zwischen Dateien und Daten und verwenden Sie diese dann in der Schleife.
%Vor%Ich muss öffnen & amp; Schreibe in etwa 10 verschiedene Dateien, die alle innerhalb derselben Schleife liegen. z.B.:
%Vor%Nun möchte ich in der Lage sein, spezifische Ausnahmeinformationen zu erhalten, beispielsweise welche Datei geöffnet / geschrieben wurde innerhalb der allgemeinen Ausnahme. Nach meinem derzeitigen Verständnis müsste ich etwas tun, um zu erreichen, was ich will:
%Vor%... Das wird extrem klobig und unattraktiv, wenn ich das für etwa 10 verschiedene Dateien machen muss. Gibt es eine Möglichkeit, die Dateiname-Information aus einer allgemeinen Ausnahme wie in meinem ersten Beispiel zu erhalten? Grundsätzlich könnte die Ausnahme Dinge wie "Fehler beim Schreiben in Datei1" ohne einen Versuch / außer speziell für Datei1 Operationen melden.
edit: Dies ist eine massive Vereinfachung der Daten, die in die Datei geschrieben werden. str (a) und str (a) + "hi" sind keine wirklich guten Darstellungen der tatsächlich geschriebenen Daten; file1 benötigt möglicherweise eine fest codierte Ganzzahl, wobei Datei2 möglicherweise eine Zeichenfolge benötigt, die mit mehreren Variablen formatiert ist. den Öffnungs- / Schreibprozess in eine Schleife zu verallgemeinern wird nicht sehr gut funktionieren.
Beachten Sie bei der Verwendung von exc_type, value, exc_traceback = sys.exc_info()
, dass der Dateiname, der die Ausnahme generiert hat, wie folgt abgerufen werden kann:
Sie erwähnen die Verwendung einer Schleife, aber Sie verwenden keine Schleife. Benutze eine Schleife. Auf diese Weise können Sie jede Datei einzeln in einen einzelnen %code% -Block schreiben. Sie scheinen nichts mit den Dateien zu tun, außer dass Sie jeweils einen Wert schreiben, sodass Sie sie nicht alle offen halten müssen.
%Vor%Bearbeiten: Wenn Sie sehr unterschiedliche Dinge zum Schreiben in die verschiedenen Dateien haben, erstellen Sie vorher ein Wörterbuch oder eine andere Datenstruktur, speichern Sie die Zuordnung zwischen Dateien und Daten und verwenden Sie diese dann in der Schleife.
%Vor%Sie können %code% verwenden, um Informationen über die momentan behandelte Ausnahme zu erhalten einschließlich des Ausnahmeobjekts selbst. Eine %code% -Ausnahme enthält alle Informationen, die Sie benötigen, einschließlich des Dateinamens, des Errno und einer Zeichenfolge, die den Fehler beschreibt:
%Vor%Die Ausführung im Block %code% wird offensichtlich nach der ersten Ausnahme noch anhalten.
Verwenden Sie das Modul Traceback :
%Vor%Tags und Links python error-handling exception python-3.3