跳转到主要内容

如果存在则导入某些内容。

项目描述

用法

此库只包含上下文管理器 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

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

optional_import-1.2.tar.gz (2.4 kB 查看散列值)

上传于 来源

由以下支持