Python PyImport\u导入失败-返回NULL
首先,是的,我看到了,但是他们没有解决我的问题/错误。Python PyImport\u导入失败-返回NULL,python,c++,c,Python,C++,C,首先,是的,我看到了,但是他们没有解决我的问题/错误。 因此,我试图从C/C++调用Python函数,但是当调用PyImport\u Import()时,它返回NULL 代码: 其中hello是我的hello.py文件,与可执行文件位于同一目录中。我不知道我的错误在哪里,有人能给我指一下吗?如果不知道有关系统设置和Python文件内容的大量信息,很难诊断您的问题。最好让Python运行时告诉您出了什么问题 美国 PyObject*PyImport\u导入模块(常量字符*名称) 返回对导入模块
因此,我试图从C/C++调用Python函数,但是当调用
PyImport\u Import()
时,它返回NULL
代码:
其中
hello
是我的hello.py
文件,与可执行文件位于同一目录中。我不知道我的错误在哪里,有人能给我指一下吗?如果不知道有关系统设置和Python文件内容的大量信息,很难诊断您的问题。最好让Python运行时告诉您出了什么问题
美国
PyObject*PyImport\u导入模块(常量字符*名称)
返回对导入模块的新引用,或返回NULL,失败时设置异常
(强调矿山)
可以调用PyErr\u Print()
将当前异常打印到stderr的状态
因此,要将此付诸实践:
PyObject* fname = PyBytes_FromString("hello");
PyObject* module = PyImport_Import(fname);
if (module == nullptr)
{
PyErr_Print();
std::exit(1);
}
这至少会让你开始找出错误
为了方便起见,您可能需要创建自己的C++异常类来包装Python错误(并且避免使用代码调用“代码> >退出<代码>之类的代码来处理代码。
< P>我认为PyUnicode\u FromString
是正确的选择
(感谢@wakjah为我提供了使用错误处理的技巧)谢谢!原来
PyBytes\u FromString()
不是PyString\u FromString()
的3.x替代方案。我得到的错误是PyImport\u Import()
不接受字节,而是字符串PyUnicode\u FromString()
解决了这个问题。再次感谢!;)使用PyErr_Print()帮助我找出了问题所在。
PyObject* fname = PyBytes_FromString("hello");
PyObject* module = PyImport_Import(fname);
if (module == nullptr)
{
PyErr_Print();
std::exit(1);
}