NameError:使用eval()后未定义名称“self”

时间:2017-10-31 20:34:52

标签: python-3.x eval

我正在尝试通过eval()在我的主要课程中定义我的按钮和其他内容时保存一些复制粘贴。我知道eval()应该小心处理,但是我在这里给出了代码中的命令。这是创建错误的代码:

class MyApp(QMainWindow):
    def __init__(self):
            [...]
            Schaltpunkte=["Aussen1","Innen1","Innen2","Innen","Alle"]
            for Schaltpunkt in Schaltpunkte:
                 eval("self.ui.Button_"+Schaltpunkt+"Laden.clicked.connect(lambda: self.ladeZeitschaltung("+Schaltpunkt+"))")

点击按钮后出现的错误:

Traceback (most recent call last):
File "<string>", line 1, in <lambda>
NameError: name 'self' is not defined

我有这个想法,因为eval()在另一个函数中运行良好:

Programm = eval("self.ui.Box_"+Schaltpunkt+"Programm.value()")

有人有什么建议吗?或者通过这样的代码将按钮与动作连接是完全错误的?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

您的lambda函数不知道self。 尝试定义一个提及self的符号表,并将其赋予eval()

symbols = {"self": self}
eval("lambda x: self.foo(x)", symbols)