PyImport_AppendInittab怎么会失败?涉及IT技术。

3
根据官方文档,PyImport_AppendInittab 在失败时会返回-1。然而,文档并未说明此函数为何会失败。
我想知道它是否只能由程序员的错误(不正确的参数、不在正确时间调用等)导致失败,或者它也可能因为一些程序员无法控制的其他因素而失败(例如Python未安装)。
我之所以问这个问题,是因为我想知道是否应该使用assert或异常来处理它。另外,如果我应该使用异常处理它,是否有任何方法可以捕获Python API的错误消息,以指明函数调用失败的原因?
1个回答

6
根据文档,PyImport_AppendInittab()是对PyImport_ExtendInittab()的便捷包装,并在“无法扩展表”时返回-1。 此外,PyImport_ExtendInittab()在“无法分配足够内存以扩展内部表”时返回-1。 两个函数“应该在Py_Initialize()之前调用”。
因此,这些函数只有在程序缺乏内存时才会失败。 我想当提供无效参数时,它们也可能会失败,例如尝试注册与现有模块名称相同的内置模块时。 后一种情况很容易避免,因为内置模块的名称是众所周知的。
总之,如果返回值为-1,则可以假定“内存不足”,但这应该永远不会发生,因为该函数仅在进程早期(在Py_Initialize()之前)调用,并且需要的模块表所需的内存量相当小。
如果PyImport_AppendInittab()失败,则Python不会提供错误字符串。 为了抛出有意义的异常,您只需报告此时已知的信息:无法将模块MODULENAME添加到解释器的内置模块中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接