我正在尝试运行以下代码:
Py_Initialize();
PyObject *py_main = PyImport_AddModule("__main__");
PyObject *py_dict = PyModule_GetDict(py_main);
PyObject *ret = PyRun_String(SOME_PYTHON_CODE, Py_file_input, py_dict, py_dict);
但是在我生成的python代码(SOME_PYTHON_CODE
)中似乎存在错误,因此ret
显示为NULL
,表示引发了异常。我怎样才能访问此例外?
答案 0 :(得分:5)
你可以这样做:
PyErr_Print();
要在标准错误上打印出标准堆栈跟踪。还有其他更精细的函数调用来处理错误,但我相信这是最简单,最简单的方法。
您还可以使用以下命令获取实际的异常/回溯对象:
PyObject* ex = PyErr_Occurred();
if (ex) {
PyObject* tb = PyException_GetTraceback(ex);
/* Do something with tb */
}
如果设置了错误指示符, ex
将为非NULL。有关详细信息,请参阅Exception Handling。
And here is a question/answer关于访问回溯对象。其中一个答案显示了如何将回溯复制到C字符串中,然后您可以将其写入文件(或者在您的情况下为GUI)。