PyImport_Import失败 - 返回 NULL

PyImport_Import fails - Returns NULL

本文关键字:返回 NULL 失败 Import PyImport      更新时间:2023-10-16

首先,是的,我已经看到了这个和这个,但是他们没有解决我的问题/错误。


因此,我正在尝试从C/C++调用Python函数,但是当调用PyImport_Import()时,它会返回NULL

法典:

PyObject* fname = PyBytes_FromString("hello");
PyObject* module = PyImport_Import(fname);

其中hello是我的hello.py文件,与可执行文件位于同一目录中。我不知道我的错误在哪里,有人可以指出我吗?

如果不了解有关系统设置方式和所涉及的 Python 文件内容的一大堆信息,就很难诊断您的问题。最好让 Python 运行时告诉你出了什么问题。

文档指出

PyObject* PyImport_ImportModule(const char *name)

返回对导入模块的新引用,或失败时设置异常的 NULL。

(强调我的)

异常处理文档指出,您可以调用PyErr_Print()将当前异常打印到 stderr。

因此,将其付诸实践:

PyObject* fname = PyBytes_FromString("hello");
PyObject* module = PyImport_Import(fname);
if (module == nullptr)
{
    PyErr_Print();
    std::exit(1);
}

这至少会让你开始找出错误。

为了将来的方便,您可能希望创建自己的C++异常类来包装 Python 错误(并避免在代码中充斥着调用 exit 之类的东西)。

我认为PyBytes_FromStringPyString_From的3.x替代品。

我错了。 PyUnicode_FromString是正确的选择。

(感谢@wakjah给了我使用错误处理的提示)