Python C API: Wie bekomme ich eine String-Repräsentation der Exception?

8

Wenn ich das tue (z.B.)

%Vor%

in Python (und die Datei existiert nicht), bekomme ich eine Traceback und die Nachricht

%Vor%

Ich möchte die obige Zeichenfolge mit Pythons C-API (d. h. einem Python-Interpreter, der in ein C-Programm eingebettet ist) erhalten. Ich brauche es als String, nicht zur Konsole ausgegeben.

Mit PyErr_Fetch() kann ich das Type-Objekt der Exception und den Wert bekommen. Für das obige Beispiel ist der Wert ein Tupel:

%Vor%

Gibt es einen einfachen Weg von den Informationen, die ich von PyErr_Fetch() zu der Zeichenkette des Python-Interpreters bekomme? (Eine, die nicht beinhaltet, solche Zeichenfolgen für jeden Ausnahmetyp selbst zu konstruieren.)

    
ashcatch 16.06.2009, 12:36
quelle

1 Antwort

6

Ich denke, dass Python-Ausnahmen gedruckt werden, indem "str ()" für die Ausnahmeinstanz ausgeführt wird, die die formatierte Zeichenfolge zurückgibt, die Sie interessiert. Sie können diese von C abrufen, indem Sie PyObject_Str() Methode hier beschrieben:

Ссылка

Viel Glück!

Update: Ich bin ein wenig verwirrt, warum das zweite Element, das von PyErr_Fetch() an Sie zurückgegeben wird, eine Zeichenfolge ist. Meine Vermutung ist, dass Sie eine "unnormalisierte Ausnahme" erhalten und PyErr_NormalizeException() aufrufen müssen, um dieses Tupel in eine "echte" Ausnahme umzuwandeln, die sich als eine Zeichenfolge formatieren kann, wie Sie es wollen.

    
Brandon Rhodes 16.06.2009, 13:25
quelle

Tags und Links