@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()
  • Вопрос задан
  • 1964 просмотра
Решения вопроса 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
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы