如何在python提示符下从函数打印变量

时间:2014-05-13 06:24:21

标签: python function printing

目录中有各种python文件,所有这些文件都包含一个函数desciption(),如下所示:

def description():
    desc = 'something'
    return desc

现在我有main.py如下:

def a():
    pth = os.listdir('homedir/workspace')
    for filename in pth :
        exec "import " + filename
        desc = eval(filename + '.desciption()')
    print desc

现在当我运行python main.py时,没有任何反应。运行python main.py时如何打印此desc? 提前谢谢!

4 个答案:

答案 0 :(得分:1)

假设导入有效,并且您在每次迭代中导入了一个名为filename的模块,那么可以按名称获取模块,并调用其descrpition()方法:

import sys
mod = sys.modules[filename]
print mod.description()

但请注意,打印模块的pydocs可能更有意义:

print mod.__doc__

答案 1 :(得分:1)

您没有在此行中正确关闭引号:

pth = os.listdir('homedir/workspace)

此外,你不应该在这里使用eval:

desc = eval(filename + '.desciption()')

我假设您想在此处按变量导入:

        exec "import " + filename

这应该是这样的:

def a():
    import importlib

    pth = os.listdir('homedir/workspace')
    for filename in pth :
        mdl = importlib.import_module(os.path.splitext(filename)[0])
        desc = mdl.description()
        print desc

请参阅https://docs.python.org/2/library/importlib.html#importlib.import_module

https://docs.python.org/2/library/os.path.html#os.path.splitext

答案 2 :(得分:0)

  1. 你错过了关闭'在pth变量中
  2. 你在最后一行引用了desc而没有先声明它。
    使用desc = None
  3. 启动您的功能

答案 3 :(得分:0)

def a():
    pth = os.listdir('homedir/workspace')

    for filename in pth:
        module_name = os.path.splitext(filename)[0]
        exec "import " + module_name
        desc = eval(module_name + '.description()')
        print desc

确保main.py与您的模块位于同一路径。或者通过

将其添加到sys路径
import sys
sys.path.append(r"homedir/workspace")