从字符串和eval()函数调用函数

时间:2019-10-15 14:21:18

标签: eval

我将说明我有2个小部件窗口 第一个主窗口 第二个QDialog 我有剧本 在QDialog窗口中,有12个QlineEdit对象,客户可以在其中为Qlabel写出12个问题的答案 单击“接受”按钮后,我想阅读每个Qline编辑并将数据放入列表中

我编写了一个有效的代码:

        for x in range(1,13):
            linki=[self.d_nieruchomosc.wpr1.text(),
            self.d_nieruchomosc.wpr2.text(),
            self.d_nieruchomosc.wpr3.text(),
            self.d_nieruchomosc.wpr4.text(),
            self.d_nieruchomosc.wpr5.text(),
            self.d_nieruchomosc.wpr6.text(),
            self.d_nieruchomosc.wpr7.text(),
            self.d_nieruchomosc.wpr8.text(),
            self.d_nieruchomosc.wpr9.text(),
            self.d_nieruchomosc.wpr10.text(),
            self.d_nieruchomosc.wpr11.text(),
            self.d_nieruchomosc.wpr12.text()]
            a=linki[x]
            nowa_nieruchomosc.append(a)
            print(nowa_nieruchomosc)

但这只是测试,我将拥有更多的QlineEdit对象,我想自动执行 self.d_nieruchomosc.wpr1.text() wpr1..12将超过50个,而我的代码将非常长。 然后我发现我可以做一些不同的事情,并且使用代码:

def functon(self):
    lista = []
    for j in range(1, 13):
        a = 'self.d_nieruchomosc.wpr{}.text()'.format(j) # make a string formula
        b = eval(a)# change string to function* and call it 
        print(b)
        lista.append(b)# add the value from QlineEdit to list
        print("Lista to: ", lista)

问题是某些python专家告诉我,在这里使用eval()函数是一个非常糟糕的主意,因为它可以从用户给定的字符串或诸如此类的字符串中调用函数。 我只是学习python,然后尝试寻找解决方案。如果有人说不好,我会想到的。第二种解决方案对我来说很完美,但是如果有任何危险,我想避免它。 是否有人可以给我解决方案,而无需eval()函数就可以工作。

0 个答案:

没有答案