我正在尝试运行以下代码:
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
,表示发生了异常。如何访问此异常?在
您可以:
在标准错误时打印出标准堆栈跟踪。我认为最简单的方法是处理更简单的调用,但我认为这是最简单的方法。在
您还可以通过以下方式获取实际的异常/回溯对象:
^{pr2}$如果设置了错误指示符,
ex
将非空。有关详细信息,请参见Exception Handling。在And here is a question/answer关于访问回溯对象。其中一个答案显示了如何将回溯复制到一个C字符串中,然后可以将其写入文件(或者在本例中是GUI)。在
由于您没有指定
SOME_PYTHON_CODE
语句的数量,因此可能存在另一个问题:根据Boost Python教程的this page,PyRun_String
的输出也取决于start
参数:Py_eval_input
用于解释孤立的表达式Py_file_input
用于解释语句序列Py_single_input
用于解释单个语句它接着说:
因此,如果您在对}。相反,您可以使用
PyRun_String
的调用中使用Py_file_input
,您将始终收到{Py_single_input
。在相关问题 更多 >
编程相关推荐