从具有依赖项的模块导入函数,而不会引发ImportErrors

时间:2015-09-05 12:53:46

标签: python exception python-import

我有一个名为<ng-view ></ng-view>的包。

当我导入此包时(使用命令analysis),由于缺少应该在另一个包(from app import analysis中)导入的库,我得到ImportError异常。

我希望能够导入web_package,即使我没有安装该库,因为analysis只导入analysis中即使没有库也可以工作的函数。< / p>

分析/ __初始化__吡啶

web_package

analysis / util.py

from app.analysis.util import some_function

web_package / __ init __。py

from app.web_package.util import some_other_function

web_package / web_client.py

from app.web_package.web_client import SomeClass

此时,如果我没有安装from missing_library import ParentClass def SomeClass(ParentClass): ,我该怎么办,但我仍想使用missing_library中的某些功能?每当我尝试从web_package/util.py导入某些内容时,它会自动进入app.web_package.util,然后进入web_package/__init__.py,这会导致web_client.py被引发。我该怎么办?

ImportError封装到from missing_library import ParentClass块中会导致try/except出错。

2 个答案:

答案 0 :(得分:1)

我想说最简单的方法是将代码重构为两个不同的模块。

一个模块具有missing_library导入,并且只有代码依赖于此missing_library,如SomeClass,那么另一个模块具有您要使用的功能,而不是依赖于遗失的图书馆。

然后,如果要在依赖模块中使用某些独立函数,只需在其中导入该模块即可。

然后在__init__.py中,您可以放置​​try/except示例 -

try:
    from app.web_package.web_client import SomeClass
except ImportError:
    pass                                #Or import some other version of `SomeClass` ?

答案 1 :(得分:1)

您可以在except子句中定义存根。以下作品:

try:
   from foo import bar;
except:
   class foo:
      pass

class baz(foo):
   pass

这是非常糟糕的设计,虽然,imho,但这是相当自以为是。