获取导入失败的当前模块的名称

时间:2016-02-26 20:02:30

标签: python python-2.7

我需要帮助才能在执行此操作时获取未导入模块的名称

所以代码是:

#!/usr/bin/env python
bla=[]
try:
    import os
    import sys
    import somethings
    import blabla
except:
    bla.append(NOT_IMPORTED_MODULE_NAME) # it should be here
if len(bla)>0:
    exit("not imported:%s" % " ".join(bla))

提前谢谢

2 个答案:

答案 0 :(得分:2)

虽然我要说的更适合作为评论,但我只是在这里打字,因为由于声誉数量低而不允许发表评论。 (因为我在这里很新)

假设您缺少sys和blabla模块。使用当前设置,它会在尝试加载sys时抛出异常。它甚至不会达到int main(){ char *input; scanf("%s",input); mysql_quer(con,"select * from < tablename > where < column > = input "); } 。因此,如果缺少先前的模块,您将不知道模块是否丢失。如果你真的想要你想要的功能,你可以用每个import blabla包装所有模块导入的异常处理。但在我看来,这是过度杀戮。正如idjaw所提到的,你应该能够从stacktrace中看到是否缺少任何模块。

答案 1 :(得分:0)

#!/usr/bin/env python
import sys
import os
from importlib import import_module

bla = []

for modulename in ('something', 'blabla'):
    try:
        import_module(modulename)
    except ImportError as exc:
        bla.append(str(exc))


if bla:
    sys.stderr.write('\n'.join(bla))
    sys.stderr.write('\n')
    sys.exit(1)