@helldess

Ошибка TypeError: 'tuple' object is not callable?

Пишу телеграм бота на библиотеке айограм, пытаюсь вывести значения из бд в инлайн кнопки, выдает ошибку:
tgitem = result()
TypeError: 'tuple' object is not callable


Код функции:
def item_kb():
    tg = InlineKeyboardMarkup(row_width=1)
    tgitem = result()
    for tovar in tgitem:
        btn_text = f'{tovar.name} | {tovar.price} | {tovar.colvo}'
        tg1 = InlineKeyboardButton(text=btn_text, callback_data='tg')
        tg.add(tg1)


Код запроса:
def get_item():
    with conn:
        result = cursor.execute("SELECT id, name, price, colvo FROM tovars").fetchone()
        return result


result = get_item()
  • Вопрос задан
  • 1439 просмотров
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
result = cursor.execute("SELECT id, name, price, colvo FROM tovars").fetchone()
return result

fetchone() возвращает либо None, либо кортеж (tuple). Значит, get_item() возвращает None (если такой строки нет) или tuple (если она есть).

result = get_item()
tgitem = result()

Ты пытаешься вызвать (call) кортеж (tuple), как будто это функция. Так нельзя, и питон тебе так и говорит:
TypeError: 'tuple' object is not callable

Читай учебник, что такое кортежи.
Ответ написан
@helldess Автор вопроса
Разобрался, можно было даже функцию запроса get_item не вносить в переменную result, т.е код получился таким:
def item_kb():
    tg = InlineKeyboardMarkup(row_width=1)
    tgitem = get_item()
    for tovar in tgitem:
        btn_text = f'{tovar[0]} | {tovar[1]} | {tovar[2]}'
        tg1 = InlineKeyboardButton(text=btn_text, callback_data='tg')
        tg.add(tg1)
    return tg

Код запроса:
def get_item():
    with conn:
        result = cursor.execute("SELECT id, name, price, colvo FROM tovars").fetchall()
        return result
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект