根据官方文档,PyImport_AppendInittab将在失败时返回-1。但是,它没有说明为什么这个功能会失败。
我想知道它是否只能由于程序员的错误(不正确的参数,没有在正确的时间调用等)而失败,或者它是否也会由于某些其他因素而失败程序员的控制(就像没有安装Python一样)。
我问,因为我想知道我是否应该使用断言或异常处理此问题。另外,如果我应该用异常处理它,有没有办法从Python API中捕获一个错误消息,指出函数调用失败的原因?
答案 0 :(得分:5)
根据文档,PyImport_AppendInittab()
是PyImport_ExtendInittab()
附近的便利包装器,如果无法扩展表,则返回-1“。此外,如果可以分配不足的内存来扩展内部表,PyImport_ExtendInittab()
返回-1“。这两个函数“应该在Py_Initialize()
之前调用。”
因此,只有程序内存不足时,这些功能才会失败。我猜他们也可能在提供无效参数时失败,例如在尝试注册与现有模块同名的内置模块时。后一种情况很容易避免,因为内置模块的名称是众所周知的。
总之,您可以假设返回值-1表示“内存不足”,并且这应该永远不会发生,因为该函数仅在流程的早期(Py_Initialize()
之前)调用,加上金额模块表所需的内存相当小。
如果PyImport_AppendInittab()
失败,Python不会提供错误字符串。要抛出有意义的异常,您只需报告此时所知的信息:无法将模块MODULENAME添加到解释器的内置模块。