如果存在则导入某些内容。
项目描述
用法
此库只包含上下文管理器 optional_import
>>> from optional_import import optional_import
成功的导入按常规工作
>>> with optional_import():
... import collections
>>> type(collections)
<type 'module'>
如果导入不存在,optional_import 将抑制否则会引发的 ImportError。
>>> import unicorns
Traceback (most recent call last):
...
ImportError: No module named unicorns
>>> with optional_import():
... import unicorns
>>> unicorns
Traceback (most recent call last):
...
NameError: name 'unicorns' is not defined
示例:Django本地设置
Django中的一种常见模式是将默认设置放在 settings.py 中,将可选的站点特定设置放在 settings_local.py 中,如果存在,则从本地设置文件导入 *。
with optional_import():
from .settings_local import *
为什么不直接捕获 ImportError 呢?
可以通过简单地捕获 ImportError 来实现可选导入
try:
import foo
except ImportError:
pass
但这种方法引入了一个问题:如果 foo 存在但引发 ImportError,我们希望引发该错误,但相反它被 except 子句吞没了。
使用 optional_import,错误会按预期引发。在下面的示例中,bad 模块尝试导入不存在的包 unicorns
>>> with optional_import():
... import bad
Traceback (most recent call last):
...
ImportError: No module named unicorns