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:
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.)
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.
Tags und Links python exception python-c-api