C++ PyImport_AppendInittab如何失败?

C++ PyImport_AppendInittab如何失败?,c++,python,c,C++,Python,C,根据官方文件,失败时将返回-1。但是,它没有指定此函数失败的原因 我想知道它是否只会因为程序员的错误、不正确的参数、没有在正确的时间调用等等而失败,或者它是否也会因为程序员无法控制的其他因素而失败,比如没有安装Python 我这样问是因为我想知道我应该用断言还是异常来处理这个问题。另外,如果我需要处理异常,有没有办法从Python API捕获一条错误消息,指定函数调用失败的原因?根据文档,PyImport_AppendInittab是PyImport_ExtendInittab的方便包装器,如果

根据官方文件,失败时将返回-1。但是,它没有指定此函数失败的原因

我想知道它是否只会因为程序员的错误、不正确的参数、没有在正确的时间调用等等而失败,或者它是否也会因为程序员无法控制的其他因素而失败,比如没有安装Python

我这样问是因为我想知道我应该用断言还是异常来处理这个问题。另外,如果我需要处理异常,有没有办法从Python API捕获一条错误消息,指定函数调用失败的原因?

根据文档,PyImport_AppendInittab是PyImport_ExtendInittab的方便包装器,如果无法扩展表,它将返回-1。此外,如果无法分配足够的内存来扩展内部表,PyImport_ExtendInittab将返回-1。这两个函数都应该在Py_初始化之前调用

因此,只有当程序内存不足时,这些功能才会失败。我猜当提供无效参数时,它们也可能失败,例如,当尝试注册与现有模块同名的内置模块时。后一种情况很容易避免,因为内置模块的名称是众所周知的

总之,您可以假设返回值-1意味着内存不足,这永远不会发生,因为函数只在Py_初始化之前的进程早期调用,加上模块表所需的内存量非常小

如果PyImport_AppendInittab失败,Python不会提供错误字符串。要抛出一个有意义的异常,您可以只报告此时已知的信息:未能将模块MODULENAME添加到解释器的内置模块中