在python中导入模块,无法使用模块中的函数

时间:2012-08-05 08:33:59

标签: python import module

我导入了如下模块:

filename = "email"
mymodule = __import__('actions.'+filename)

我遇到的问题是,文件是立即执行的,我宁愿从文件中执行一个特定的函数(这样我就可以通过它发送变量)。

目前,我并没有立即关注脚本是否在我添加以下行时(导入脚本时)执行,因为我将使用if __name__ == "__main__"技巧解决它。

mymodule = __import__('actions.'+filename)

但是我想要工作的是当我在下面添加这一行时,我希望该函数能够执行。但相反,我得到一个错误,即模块没有该功能,即使它存在于脚本中。

mymodule.OpenEmail(n)

函数名称并不重要,因为我在运行它时能够让下面的脚本独立工作,但是当我尝试在空闲时导入它并执行上面的行时,我得到一个错误,说明了模块没有该功能(或一些非常类似的错误)。无论如何,以下代码是我正在使用的示例脚本,如插件。但我的主要观点是我能够在python中动态导入和执行脚本,但现在我希望能够将变量发送到该文件。如果我能以某种方式让函数像上面那样工作,我相信它会解决我的问题。

import webbrowser
def OpenEmail():
    handle = webbrowser.get()
    handle.open('http://gmail.google.com')
OpenEmail()
print "Your email has been opened"

2 个答案:

答案 0 :(得分:2)

As documented,使用带有虚线名称的__import__()且没有fromlist参数返回对最顶层包的引用。您可以使用点表示法或使用getattr()来访问适当的属性以下降包层次结构。

答案 1 :(得分:0)

很简单,这就是我在IDLE中做的事情

filename = 'actions.email'
mod = __import__(filename)
VAR = getattr(mod, 'email')
VAR.OpenEmail()

打开我的电子邮件!