PyImport_AppendInittab为什么会失败?
How can PyImport_AppendInittab fail?
根据官方文档,PyImport_AppendInittab在失败时会返回-1。但是,它没有指定为什么这个函数会失败。
我想知道它是否只会因为程序员的错误而失败(不正确的参数,没有在正确的时间被调用等),或者它是否也会因为程序员无法控制的其他因素而失败(如未安装Python)。
我问是因为我想知道我应该用断言还是异常来处理这个。此外,如果我应该用异常处理它,我是否有办法从Python API捕获指定函数调用失败原因的错误消息?
根据文档,PyImport_AppendInittab()
是PyImport_ExtendInittab()
的方便包装,并且返回-1 "如果表不能扩展"。此外,PyImport_ExtendInittab()
返回-1"如果没有足够的内存可以分配到扩展内部表"。这两个函数"都应该在Py_Initialize()
之前调用"
因此,只有当程序内存不足时,这些函数才会失败。我猜当提供无效参数时,它们也可能失败,例如当试图注册与现有模块同名的内置模块时。后一种情况很容易避免,因为内置模块的名称是众所周知的。
总之,您可以假设返回值-1表示"内存不足",这应该永远不会发生,因为该函数只在进程的早期被调用(在Py_Initialize()
之前),加上模块表所需的内容量相当小。
如果PyImport_AppendInittab()
失败,Python不提供错误字符串。要抛出一个有意义的异常,您只需报告您此时所知道的信息:未能将模块MODULENAME添加到解释器的内置模块。
相关文章:
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 当给定默认值时,为什么此模板参数推导失败
- 为什么在使用typedef时类推导指南会失败
- 为什么 KMS drmModeSetCrtc() 在 X11 会话中运行时会失败并被拒绝权限?
- 如果我重新定义 sqrt 函数,为什么使用 std::sqrt 失败?
- 为什么模板参数推导失败?
- 为什么此对箭头 (->) 运算符的调用失败?
- 使用"std::function"和先前推断的模板参数替换失败 - 为什么?
- MSVS2010 C 控制台代码移植到MSVS2010 C GUI失败.为什么
- C++全局对象初始化失败——为什么?以及是否可以将对象放入.DATA部分
- RAII 失败 - 为什么此C++代码泄漏?- 在尝试块中加入 CTOR 阻止 DTOR
- 自动键入到自动方法失败.为什么
- C++模板参数推断失败.为什么
- c++对象的位拷贝失败?为什么
- 代码意外编译失败.为什么
- 尝试在构造函数中初始化数据成员,但失败.为什么
- 由于ECHILD错误,C++中的system()函数在一段时间内运行良好,但在返回-1时失败.为什么?
- BOOST/CSTDINT类型BOOST稀疏向量数组失败,为什么