Python-C-API: Wie String-Darstellung Ausnahme zu bekommen?
-
05-07-2019 - |
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.)
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.