【问题标题】:python: library behavior on failed importpython:导入失败时的库行为
【发布时间】:2011-04-11 21:07:28
【问题描述】:

当某些模块无法导入时,库的行为方式是否有任何标准做法?它应该只是让异常发生,还是应该捕获它并使用适当的信息优雅地退出?

例如我有这样的事情:

try:
   from argparse import ArgumentParser
except ImportError:
   print('fathom library requires python 3.2 or argparse package.')

是好还是坏?

【问题讨论】:

    标签: python import importerror


    【解决方案1】:

    库应该总是提出ImportError 而不是退出;程序可能希望有条件地包含它(可能在它不可用时替换它)。

    如果较低级别的模块引发了ImportError,最好的办法是重新引发它并附上额外的信息。

    【讨论】:

    • 您的第一段令人困惑。在 2 种情况下(A 尝试导入 B,A 尝试导入 B 尝试导入 C),请说出“库”、“程序”和“它”。最合理的解释是 A==program, B==library, C==it ...但是“it”没有指称。
    【解决方案2】:

    如果可以,将模块与您的包一起分发,然后按照此模式选择您正在使用的模块(首选 Python 3.x,默认为您提供的模块)。

    如果不是,这通常是可以的,只要您还确保这不会在以后默默地导致更模糊的异常(即,确保您在 except 的末尾进行清理,并且很可能,要么重新抛出这个异常或抛出你自己的)。

    PS - This wasn't an uncommon occurrence for simplejson before it got included in Python proper as well

    【讨论】:

    • 这是个好主意。我会将argparse 包包含到我的库中作为后备。谢谢。
    【解决方案3】:

    这是一个品味问题。不过我喜欢你的方法。干净整洁。

    【讨论】:

      猜你喜欢
      • 2017-07-14
      • 1970-01-01
      • 2016-01-17
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2017-08-08
      相关资源
      最近更新 更多