4

现在我想构建一个函数 get_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
4

2 回答 2

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__

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

于 2013-11-15T02:50:36.127 回答
2

当你说

get_doc(sys)

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

  1. 将模块名称作为字符串参数传递

  2. 使用__import__函数加载模块,像这样

    def get_doc(module):
        mod = __import__(module)
        print mod.__doc__
    
    get_doc("sys")
    

注意:我不赞成在程序中执行动态代码,但是如果您必须使用exec来解决这个问题,请阅读内容并基本了解安全含义,然后查看 aIKid 的解决方案。

于 2013-11-15T02:49:44.157 回答