这是我的文件结构:
[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
模块本身包含导入异常,它将无声地失败。有没有办法导入可选模块而不会从模块中消除任何异常?
这可能看起来像一个模糊的场景,但由于沉默的异常我得到了一个令人讨厌的错误,我想防止将来发生这种情况。
答案 0 :(得分:8)
这有点hacky,但您可以检查异常上的消息以确定失败的原因:
try:
from mylibrary.codecs import optional
except ImportError, e:
if e.message != 'No module named optional':
raise
使用此代码,如果导入可选模块失败,则会被忽略,但如果有任何其他情况引发异常(导入另一个模块,语法错误等),它将被引发。