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',這很奇怪。這讓我陷入了一個循環。 –