8

这是我的文件结构:

[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模块本身包含导入异常,它将静默失败。有没有办法在不消除模块异常的情况下导入可选模块?


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

4

1 回答 1

8

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

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

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

于 2012-01-16T15:13:47.060 回答