在Python3.5中使用PyEval_EvalCode

2024-06-11 23:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将扩展模块从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*。要将其转换为可以传递给PyObjectPyObject,我需要做些什么?在


Tags: 模块代码nodegetifcodestructpyobject
1条回答
网友
1楼 · 发布于 2024-06-11 23:39:30

对于绝大多数Python类型,PyObject是该类型的“父”结构。尝试转换参数:(PyObject*)compiled_code。在

Code Objects文档清楚地表明,PyObject*可以是{}(否则{}将不存在),因此,如果您知道它是一个代码对象,则转换是安全的。在

相关问题 更多 >