Задать вопрос
@LordOfARing

Почему бот не сохраняет записи в другую БД, а выдает ошибку 'NoneType' object is not subscriptable?

Есть код бота, который отрабатывает корректно:

from aiogram import executor
from dispatcher import dp
import handlers

from db import BotDataBase
BotDataBase = BotDataBase('accountant.db')

if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)


В папке проекта находятся несколько баз данных. Они идентичны, внутренне ничем не отличаются. Только разные названия. Созданы обычным копипастом друг друга.

Проблема. Делаю следующие шаги:
1. Я в коде меняю подставляю название другой БД, например:
BotDataBase = BotDataBase('new_accountant.db)

2. Запускаю код (запускается без ошибок).
3. Пишу боту команду добавления записи в БД (например earned/ 1000)

Ожидаемый результат:
Запись добавляется в new_accountant.db, и бот пишет что все ок.

Фактический результат:
Запись не добавляется в new_accountant.db, бот молчит, а Pycharm выдает ошибку:

INFO:aiogram:Bot: Head_of_Accounting [@Head_of_Accounting_Bot]
WARNING:aiogram:Updates were skipped successfully.
INFO:aiogram.dispatcher.dispatcher:Start polling.
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-18' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=TypeError("'NoneType' object is not subscriptable")>
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
    for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
    return await asyncio.gather(*tasks)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
    return await self.message_handlers.notify(update.message)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python311\Lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
    response = await handler_obj.handler(*args, **partial_data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\TgAccountingBot_1\handlers\personal_actions.py", line 29, in start
    BotDataBase.add_record(message.from_user.id, operation, value)
  File "C:\Users\User\PycharmProjects\TgAccountingBot_1\db.py", line 27, in add_record
    (self.get_user_id(user_id),
     ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\PycharmProjects\TgAccountingBot_1\db.py", line 17, in get_user_id
    return result.fetchone()[0]
           ~~~~~~~~~~~~~~~~~^^^
TypeError: 'NoneType' object is not subscriptable


Возвращаю название БД на то, которое и было (accountant.db) и все снова в норме.

Не могу понять как связана ошибка
return result.fetchone()[0]
TypeError: 'NoneType' object is not subscriptable
с подстановкой другой, совершенно идентичной БД, у которой просто другое название.
Подскажите, как пофиксить баг?
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Похоже, что в одной базе есть искомый пользователь, а в другой нет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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