python - 从具有依赖关系的模块导入函数而不引发 ImportErrors

标签 python exception python-import

我有一个名为analysis的包。

当我导入此包(使用命令from app importanalysis)时,我收到一个ImportError异常,因为缺少应该在另一个包中导入的库(web_package)。

即使我没有安装该库,我也希望能够导入 analysis,因为 analysis 仅从 web_package 导入函数即使没有库也可以工作。

分析/__init__.py:

from app.analysis.util import some_function

分析/util.py:

from app.web_package.util import some_other_function

web_package/__init__.py:

from app.web_package.web_client import SomeClass

web_package/web_client.py:

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。我能做什么?

frommissing_library import ParentClass 包装到 try/except block 中将导致 def SomeClass(ParentClass) 出错。

最佳答案

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

一个模块具有 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` ?

关于python - 从具有依赖关系的模块导入函数而不引发 ImportErrors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413276/

相关文章:

python - 在显示转换为 float 的图像时出现奇怪的 matplotlib 行为

python - 为什么我的索引字段仍然显示为 "analyzed"即使我将它们索引为 "not_analyzed"

c++ - 如何处理多个 Action 和异常

python - 模块未找到错误: No module named 'adspy_shared_utilities'

python - 有没有办法让我们在discord.py中一次获取多个命令的剩余冷却时间?

python - 将文本文件读入 pandas 数据框失败

c# - SCSF 中的异常处理

exception - haskell "exceptions"

Python PEP 273 和 Amazon BotoCore

Python 使用不同的内部导入两次从模块导入函数