python – 如何在调用PyRun_String(…)后返回NULL时获取异常信息?
作者:互联网
我试图运行以下代码:
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,表示引发了异常.我怎样才能访问此例外?
解决方法:
你可以做:
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).
标签:c-3,python,python-c-api 来源: https://codeday.me/bug/20190830/1769228.html