1
我试图将扩展模块从2.7移植到3.5。扩展模块使用PyEval_EvalCode
。它用一些代码类似于以下代码:在Python 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()));
}
}
在Python 2.7中,这工作正常。在Python 3.5中,我得到编译失败,因为PyNode_Compile
返回PyCodeObject
,但在Python 3.5中PyEval_EvalCode
接受 a PyObject*
。我需要做些什么来将其转换为PyObject
,我可以传递给PyEval_EvalCode
?
谢谢,他们决定像所有其他方法一样,让'PyNode_Compile'返回一个'PyCodeObject'而不是'PyObject',这很奇怪。这让我陷入了一个循环。 –