我有一个名为<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
出错。
答案 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,但这是相当自以为是。