首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不引发ImportErrors的情况下从具有依赖项的模块导入函数

在不引发ImportErrors的情况下从具有依赖项的模块导入函数
EN

Stack Overflow用户
提问于 2015-09-05 12:53:46
回答 2查看 293关注 0票数 1

我有一个叫analysis的包裹。

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

即使没有安装库,我也希望能够导入analysis,因为analysis只是从web_package导入功能,即使没有库也可以工作。

analysis/__init__.py

代码语言:javascript
复制
from app.analysis.util import some_function

analysis/util.py

代码语言:javascript
复制
from app.web_package.util import some_other_function

web_package/__init__.py

代码语言:javascript
复制
from app.web_package.web_client import SomeClass

web_package/web_client.py

代码语言:javascript
复制
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块将导致def SomeClass(ParentClass)出错。

EN

回答 2

Stack Overflow用户

发布于 2015-09-05 13:59:04

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

一个模块有missing_library导入,并且只有依赖于这个missing_library的代码,比如SomeClass,然后另一个模块具有您想要使用的函数,这些函数不依赖于缺少的库。

然后,如果您想在您的依赖模块中使用这些独立的函数,您可以简单地将该模块导入其中。

然后在你的__init__.py中,你可以把try/except的例子-

代码语言:javascript
复制
try:
    from app.web_package.web_client import SomeClass
except ImportError:
    pass                                #Or import some other version of `SomeClass` ?
票数 1
EN

Stack Overflow用户

发布于 2015-09-05 14:04:27

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

代码语言:javascript
复制
try:
   from foo import bar;
except:
   class foo:
      pass

class baz(foo):
   pass

这是相当糟糕的设计,虽然,伊莫,但这是相当固执的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32413276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档