【问题标题】:How can PyImport_AppendInittab fail?PyImport_AppendInittab 怎么会失败?
【发布时间】:2011-07-26 08:21:13
【问题描述】:

根据官方文档,PyImport_AppendInittab 将在失败时返回 -1。但是,它没有说明此函数失败的原因。

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

我问是因为我想知道是否应该使用断言或异常来处理这个问题。另外,如果我应该用异常处理它,有什么方法可以让我从 Python API 中捕获一条错误消息,说明函数调用失败的原因?

【问题讨论】:

    标签: c++ python c


    【解决方案1】:

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

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

    总而言之,您可以假设返回值 -1 表示“内存不足”,这绝不应该发生,因为该函数仅在进程的早期(Py_Initialize() 之前)调用,加上内存量模块表所需的量很小。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2012-08-30
      相关资源
      最近更新 更多