PyImport_Import失败 - 返回 NULL
PyImport_Import fails - Returns NULL
首先,是的,我已经看到了这个和这个,但是他们没有解决我的问题/错误。
因此,我正在尝试从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_FromString
是PyString_From
的3.x替代品。
我错了。 PyUnicode_FromString
是正确的选择。
(感谢@wakjah给了我使用错误处理的提示)
相关文章:
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- fopen 在 gdb 中返回 NULL
- 为什么要从main()返回NULL?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- boost::p ython:PyErr_Fetch始终返回 NULL 回溯
- 如何在 Visual C++ 中从返回类型为 map 的函数返回 null?
- 如何在C++中返回Null作为引用
- 从模板化函数返回Null对象
- GDALOpen 在 GEOTiff 文件上返回 null
- PyThreadState_GET() 从 PyImport_GetModuleDict() 中返回 NULL
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 在构造函数处将类对象强制转换为接口始终返回 NULL
- 如何为迭代器返回"null"值?
- 具有 4 个指针的节点的递归插入函数返回 null
- winAPI FindResource 仅在 DLL 中返回 NULL
- 使用 dlopen/dlsym 打开C++共享库 - dlsym 返回 NULL
- SetWindowsHookEx 在挂接到其他线程时返回 NULL
- 尚未归shared_ptr所有的实例的 shared_from_this() 总是返回 null?