如何使用exec动态导入模块

时间:2013-11-15 02:46:27

标签: python exec

现在我想构建一个函数get_doc(),它可以获得模块的 doc 这是代码

def get_doc(module):
    exec "import module"
    print module.__doc__

返回的信息:

Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    get_doc(sys)
NameError: name 'sys' is not defined

2 个答案:

答案 0 :(得分:3)

问题是您导入的是"module"而不是指定的模块,并且您没有将名称module放在任何位置。对此的一个愚蠢的解决方法是始终使用exec

def get_doc(module):
    exec "import {}".format(module)
    exec "print {}.__doc__".format(module)"

但我会建议您使用exec函数代替__import__

def get_doc(module):
    module = __import__(module)
    print module.__doc__

这允许更多的灵活性,您可以根据需要修改,使用模块。

答案 1 :(得分:2)

当你说

get_doc(sys)

python将无法识别sys。做你想做的事的实际方法是

  1. 将模块名称作为字符串参数传递
  2. 使用__import__函数加载模块,就像这样

    def get_doc(module):
        mod = __import__(module)
        print mod.__doc__
    
    get_doc("sys")
    
  3. 注意:我不赞成在程序中执行动态代码,但如果必须使用exec来解决此问题,请阅读this并对此有基本了解安全问题,然后看看aIKid的解决方案。