这是我的文件结构:
[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
模块本身包含导入异常,它将静默失败。有没有一种方法可以导入可选模块而不消除模块中的任何异常?
这似乎是一个晦涩的场景,但由于沉默的异常,我遇到了一个严重的错误,我想防止这种情况在未来发生。
最佳答案
这有点 hacky,但您可以检查有关异常的消息以确定失败的原因:
try:
from mylibrary.codecs import optional
except ImportError, e:
if e.message != 'No module named optional':
raise
使用这段代码,如果导入可选模块失败,它将被忽略,但如果有任何其他引发异常(导入另一个模块、语法错误等),它将被引发。
关于python - 导入可选模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881753/