我正在尝试将扩展模块从2.7移植到3.5。扩展模块使用PyEval_EvalCode
。它使用类似于以下代码来执行此操作:
struct _node *compiled_node = PyParser_SimpleParseString (in_string, Py_file_input);
if (compiled_node)
{
PyCodeObject *compiled_code = PyNode_Compile (compiled_node, "temp.py");
if (compiled_code)
{
return_value.Reset(PyEval_EvalCode (compiled_code, globals.get(), locals.get()));
}
}
在Python2.7中,这很好地工作。在python3.5中,我遇到了一个编译失败,因为PyNode_Compile
返回一个PyCodeObject
,但在python3.5中,PyEval_EvalCode
接受aPyObject*
。要将其转换为可以传递给PyObject
的PyObject
,我需要做些什么?在
对于绝大多数Python类型,
PyObject
是该类型的“父”结构。尝试转换参数:(PyObject*)compiled_code
。在Code Objects文档清楚地表明,}(否则{}将不存在),因此,如果您知道它是一个代码对象,则转换是安全的。在
PyObject*
可以是{相关问题 更多 >
编程相关推荐