Телеграм бот, ошибка TypeError: 'NoneType' object is not subscriptable

Рейтинг: 0Ответов: 1Опубликовано: 11.05.2023

бот спокойно работает в личке, но как только в группе пытаюсь пообщаться выдает следующее:

 if baninf[0] == 0:

TypeError: 'NoneType' object is not subscriptable

Сам код:

@bot.message_handler(func=lambda message: message.text.lower() == 'баланс' or message.text == '💵 Баланс')
def balance(message):
    baninf = cursor.execute(f"SELECT ban FROM users WHERE id = {message.from_user.id}").fetchone()
    if baninf[0] == 0:
        balanceu = cursor.execute(f'SELECT money FROM users WHERE id = {message.from_user.id}').fetchone()
        userbank = cursor.execute(f'SELECT bank FROM users WHERE id = {message.from_user.id}').fetchone()
        usernick = cursor.execute(f'SELECT nick FROM users WHERE id = {message.from_user.id}').fetchone()
        bot.send_message(message.from_user.id, f"{usernick[0]} 💰 Ваш баланс: {balanceu[0]}$ \n 💳 В банке: {userbank[0]}$")

Ответы

▲ 0

Такая ошибка из-за обращения к атрибуту который равен None

В коде ошибка возникает в строке if baninf[0] == 0:. Вероятно, запрос cursor.execute(f"SELECT ban FROM users WHERE id = {message.from_user.id}").fetchone() не возвращает никаких результатов и вороятно всего равен None, а вы пытаетесь обратиться к нулевому индексу baninf[0], что вызывает ошибку.

@bot.message_handler(func=lambda message: message.text.lower() == 'баланс' or message.text == '💵 Баланс')
def balance(message):
    baninf = cursor.execute(f"SELECT ban FROM users WHERE id = {message.from_user.id}").fetchone()
    if baninf is not None and baninf[0] == 0:
        balanceu = cursor.execute(f'SELECT money FROM users WHERE id = {message.from_user.id}').fetchone()
        userbank = cursor.execute(f'SELECT bank FROM users WHERE id = {message.from_user.id}').fetchone()
        usernick = cursor.execute(f'SELECT nick FROM users WHERE id = {message.from_user.id}').fetchone()
        bot.send_message(message.from_user.id, f"{usernick[0]} 💰 Ваш баланс: {balanceu[0]}$ \n 💳 В банке: {userbank[0]}$")

Теперь код проверяет, что baninf не равно None, прежде чем обращаться к нулевому индексу