【发布时间】:2010-10-29 16:53:03
【问题描述】:
我的应用程序有一个使用 execfile 动态执行 python 脚本的按钮。如果我在脚本中定义一个函数(例如 spam())并尝试在另一个函数中使用该函数(例如 eggs()),我会收到此错误:
NameError: global name 'spam' is not defined
从 eggs() 中调用 spam() 函数的正确方法是什么?
#mainprogram.py
class mainprogram():
def runme(self):
execfile("myscript.py")
>>> this = mainprogram()
>>> this.runme()
# myscript.py
def spam():
print "spam"
def eggs():
spam()
eggs()
另外,我似乎无法从脚本中的主应用程序执行方法。即
#mainprogram.py
class mainprogram():
def on_cmdRunScript_mouseClick( self, event ):
execfile("my2ndscript.py")
def bleh():
print "bleh"
#my2ndscript.py
bleh()
错误是:
NameError: name 'bleh' is not defined
从 my2ndscript.py 调用 bleh() 的正确方法是什么?
编辑:更新第一期
【问题讨论】:
-
无法重现第一个问题 - 将您的文本复制到 /tmp/zau 并运行 execfile('/tmp/zau') 对我来说很好。第二个问题是您的错误- bleh 不是全局函数,而是类 mainprogram 的(错误定义的)方法;如果你把 bleh 变成一个静态方法,脚本将能够调用 mainprogram.bleh() [仍然不是裸名 'bleh()' 因为,事实上,这个裸名没有被定义,这个名字只在类内部定义)。
-
第一期的execfile也在一个类里面。查看更新的问题。
标签: python class scope namespaces