Python. Странное поведение функции 'eval()'
Итак, есть следующий код:
keyboard = types.InlineKeyboardMarkup()
button_0 = types.InlineKeyboardButton(text='%s' %generateButton[0], callback_data= '%s' %generateindex[0])
button_1 = types.InlineKeyboardButton(text='%s' %generateButton[1], callback_data= '%s' %generateindex[1])
for i, item in enumerate(generateindex):
f = 'button_' + str(i)
keyboard.add(eval(f))
Это функция добавления инлайн-кнопок в телеграм боте, где в keyboard.add() нужно добавить имена кнопок (button_0, button_1 И так далее)
Код работает, но проблема в том, что кнопки создаются циклом, т.е. по итогу каждая кнопка передается отдельным сообщением, вместо того, чтобы показать все кнопки сразу.
Чтобы решить эту проблему я решил сделать другой вариант:
e = [i for i in range(len(generateindex))]
but = 'button_'
d = [but+str(i) for i in range(0,len(generateindex))]
z = str(d); a = z.replace("'",""); b = a.replace("[",""); c = b.replace("]",""); a = "'" + c + "'";
keyboard.add(eval(a)) # "а" в этом случае 'button_0, button_1, button_2, button_3, button_4, button_5'
И вот этот код не работает! т.е. передавая названия "button_0" по одному она работала, а при попытке передать все переменные сразу - выдает ошибку: row.append(button.to_dic()) AttributeError: 'str' object has no attribute 'to_dic'