Вызов функции из строки и функции eval () - PullRequest
0 голосов
/ 15 октября 2019

Я объясню, у меня есть 2 окна виджетов. 1-е главное окно. 2-й QDialog, и у меня есть скрипт. В окне QDialog есть 12 объектов QlineEdit, где клиент пишет ответы на 12 вопросов в Qlabel. После нажатия кнопки «Принять» я хотел бы прочитать каждый из этих 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 ().

...