PyImport_AppendInittab如何失败?

根据官方文档, PyImport_AppendInittab将在失败时返回-1。 但是,它没有说明为什么这个function会失败。

我想知道它是否只能由于程序员的错误(不正确的参数,没有在正确的时间被调用等)而失败,或者它是否也会由于程序员无法控制的其他因素而失败(像Python没有安装)。

我问,因为我想知道我是否应该使用断言或exception处理此问题。 另外,如果我应该用exception处理它,有没有办法从Python API中捕获一个错误消息,指出函数调用失败的原因?

根据文档, PyImport_AppendInittab()PyImport_AppendInittab()的便利包装器,如果无法扩展表,则返回-1“。 此外, PyImport_ExtendInittab()返回-1“如果可以分配不足的内存来扩展内部表”。 两个函数“应该在Py_Initialize()之前Py_Initialize() ”。

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

总之,您可以假设返回值-1表示“内存不足”,并且这应该永远不会发生,因为该函数仅在进程的早期( Py_Initialize()之前) Py_Initialize() ,加上该函数所需的内存量。模块表相当小。

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