Frage

Wenn ich tun (z.)

 open("/snafu/fnord")

in Python (und die Datei nicht existiert), erhalte ich eine Rückverfolgung und die Meldung

 IOError: [Errno 2] No such file or directory: '/snafu/fnord'

Ich mag die oben Zeichenfolge mit Python-C-API (das heißt ein Python-Interpreter in einem C-Programm eingebettet) erhalten. Ich brauche es als String, nicht auf die Konsole.

Mit PyErr_Fetch() kann ich den Typ Aufgabe der Ausnahme und den Wert erhalten. Für das obige Beispiel ist der Wert ein Tupel:

 (2, 'No such file or directory', '/snafu/fnord')

Gibt es eine einfache Art und Weise aus den Informationen, die ich von PyErr_Fetch() auf den String bekomme das Python-Interpreter zeigt? (Eines, das beinhaltet nicht solche Zeichenfolge für jede Ausnahme geben, sich zu konstruieren.)

War es hilfreich?

Lösung

Ich denke, dass Python Ausnahmen durch Ausführen von „str ()“ auf die Ausnahme-Instanz gedruckt werden, die den formatierten String Sie interessiert sind zurückkehren Sie diese von C durch den Aufruf der PyObject_Str() hier beschriebene Methode:

https://docs.python.org/c-api/object.html

Viel Glück!

Update: Ich bin ein wenig verwirrt, warum das zweite Element, die Ihnen von PyErr_Fetch() zurückgegeben wird eine Zeichenfolge ist. Meine Vermutung ist, dass Sie eine „nicht-normierte Ausnahme“ erhalten und müssen PyErr_NormalizeException() so nennen Tupels in eine „echte“ Ausnahme zu machen, die sie als String formatiert werden kann, wie Sie es wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top