编程语言
首页 > 编程语言> > python – 如何在调用PyRun_String(…)后返回NULL时获取异常信息?

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