1

我尝试用变量名定义一个函数。

从数据库中检索名称。对于我想定义一个按钮并进行单独处理的每个名称:

title=['BNL','CE']
for i in range(0,len(title)):
    panelvpu.add(Button(title[i]))


for i in range(0,len(title)):
    eval('def onButtonClick'+title[i]+'(self, event):')
    eval('    Window.alert("Yes")')

按钮定义没问题,但是在定义的函数中对事件的处理给出了错误

im1 SyntaxError: at index 4 in "def onMenu1Item1(self): 
Window.alert("Item 1 selected")": expected ';', got 'onMenu1Item1'

反馈后我将其更改为

    title=['BNL','CE']
    for t in title : panelvpu.add(Button(t))

for t in title:        
    def_code = "print t"
    exec(def_code)

只是为了感受;在 python 下这工作正常。但是我使用睡衣,最后一个代码确实引发了错误说明

 im1 TypeError: iter is undefined

看来睡衣还不支持 eval() 和 exec()。

理查德

4

1 回答 1

9

这里有很多问题:

1)eval用于评估表达式,而不是执行语句。

2)exec需要将整个功能合二为一exec,而不是像你拥有的那样分成单独的行。

3)有更简单的方法来创建函数,这取决于你想在体内拥有什么。告诉我们你真正想做的事。

4)您的循环要简单得多for t in title: blah blah t

于 2011-10-07T19:00:32.807 回答