导入可选模块

时间:2012-01-16 14:57:41

标签: python module optional

这是我的文件结构:

[mylibrary]
    __init__.py 

    [codecs]
        __init__.py < this is the file that we're talking about
        optional.py

现在我在标记__init__.py

中有此代码
def load_optional_codecs():
    try:
        from mylibrary.codecs import optional
        # do stuff with optional
    except ImportError:
        pass

这有一个问题。如果optional模块本身包含导入异常,它将无声地失败。有没有办法导入可选模块而不会从模块中消除任何异常?


这可能看起来像一个模糊的场景,但由于沉默的异常我得到了一个令人讨厌的错误,我想防止将来发生这种情况。

1 个答案:

答案 0 :(得分:8)

这有点hacky,但您可以检查异常上的消息以确定失败的原因:

try:
    from mylibrary.codecs import optional
except ImportError, e:
    if e.message != 'No module named optional':
        raise

使用此代码,如果导入可选模块失败,则会被忽略,但如果有任何其他情况引发异常(导入另一个模块,语法错误等),它将被引发。