PyImport_Import失败 - 返回NULL

时间:2014-12-14 12:49:37

标签: python c++ c

首先,是的,我看过thisthis,但是他们没有解决我的问题/错误。

<小时/> 所以,我试图从C / C ++调用Python函数,但是当调用PyImport_Import()时它返回NULL

代码:

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

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

2 个答案:

答案 0 :(得分:10)

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

documentation

  

PyObject * PyImport_ImportModule(const char * name)

     

...

     

返回对导入模块的新引用,或者返回NULL 并设置失败例外

(强调我的)

exception handling documentation表示您可以调用PyErr_Print()将当前例外打印到stderr。

所以要付诸实践:

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

这至少可以让你开始搞清楚错误。

为了将来的方便,您可能希望创建自己的C ++异常类来包装Python错误(并避免使用诸如调用exit之类的内容来编写代码。)

答案 1 :(得分:4)

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

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

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