Ausnahmedaten in Python erhalten

9

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.

    
user891876 08.04.2013, 19:12
quelle

4 Antworten

16

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:

%Vor%

Die Ausführung im Block try wird offensichtlich nach der ersten Ausnahme noch anhalten.

    
Cairnarvon 08.04.2013 23:44
quelle
7

Verwenden Sie das Modul Traceback :

%Vor%     
rstackhouse 05.03.2015 21:31
quelle
1

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.

%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%     
BrenBarn 08.04.2013 19:21
quelle
1
___ qstnhdr ___ Ausnahmedaten in Python erhalten ___ qstntxt ___

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.

    
___ antwort43712359 ___

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:

%Vor%     
___ answer15887183 ___

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%     
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ answer15890953 ___

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.

    
___ tag123errorhandling ___ Programmiersprachenkonstrukte zur Behandlung von Fehlern, die durch Fehlercodes, Ausnahmen oder andere sprachspezifische Mittel angezeigt werden. ___ tag123python33 ___ Für Python 3.3 spezifische Probleme. Verwenden Sie nach Möglichkeit die allgemeineren Tags [python] und [python-3.x]. ___ tag123exception ___ Eine Ausnahme ist eine ungewöhnliche Bedingung, die eine Abweichung vom normalen Ablauf des Programms erfordert. Normalerweise sollte eine Ausnahme nicht zu einem Totalausfall führen, sondern stattdessen von einem Ausnahmebehandler begleitet werden. Die Ausnahmebehandlung ist ein eingebautes Konstrukt in vielen Programmiersprachen. In der Regel werden Ausnahmen behandelt, indem der Stapel abgewickelt wird und somit in einen definierten Zustand außerhalb des Gültigkeitsbereichs der Ausnahme zurückversetzt wird und dann ein Verarbeitungsblock oder eine Routine aufgerufen wird. ___ answer28888132 ___

Verwenden Sie das Modul Traceback :

%Vor%     
___
ranaalisaeed 30.04.2017 23:19
quelle