导入可选模块

orl*_*rlp 7 python module optional

这是我的文件结构:

[mylibrary]
    __init__.py 

    [codecs]
        __init__.py < this is the file that we're talking about
        optional.py
Run Code Online (Sandbox Code Playgroud)

现在我在标记的代码中有这个代码__init__.py:

def load_optional_codecs():
    try:
        from mylibrary.codecs import optional
        # do stuff with optional
    except ImportError:
        pass
Run Code Online (Sandbox Code Playgroud)

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


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

gly*_*bet 8

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

try:
    from mylibrary.codecs import optional
except ImportError, e:
    if e.message != 'No module named optional':
        raise
Run Code Online (Sandbox Code Playgroud)

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

  • @glglgl`parsingError('找不到</ rant>的标签')` (4认同)