AttributeError: 'list' object has no attribute 'chat' ошибка в Python
Я пытаюсь перенести функции из голосового ассистента в бота для телеграмма. В итоге я вообще не могу понять что это за ошибка, и что её вызывает - AttributeError: 'list' object has no attribute 'chat' Помогите плиз
пока отлавливал ошибку, понял что проблема в этой строке - await commands[key](args)
Полный текст ошибки:
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-9' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\hybas\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py:409> exception=AttributeError("'list' object has no attribute 'chat'")>
Traceback (most recent call last):
File "c:/Users/hybas/Desktop/umorist/bot_new.py", line 50, in search_for_definition_on_wikipedia
await bot.send_message(message.chat.id, "Начинаю поиск информации о " + search_term + " на википедии")
AttributeError: 'list' object has no attribute 'chat'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:/Users/hybas/Desktop/umorist/bot_new.py", line 68, in execute_command_with_name
await commands[key](args)
File "c:/Users/hybas/Desktop/umorist/bot_new.py", line 59, in search_for_definition_on_wikipedia
await bot.send_message(message.chat.id, "ошибка, БЗЗ")
AttributeError: 'list' object has no attribute 'chat'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\hybas\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py", line 417, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File "C:\Users\hybas\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py", line 238, in process_updates
return await asyncio.gather(*tasks)
File "C:\Users\hybas\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "C:\Users\hybas\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\dispatcher.py", line 259, in process_update
return await self.message_handlers.notify(update.message)
File "C:\Users\hybas\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "c:/Users/hybas/Desktop/umorist/bot_new.py", line 75, in get_message
await execute_command_with_name(command, command_options)
File "c:/Users/hybas/Desktop/umorist/bot_new.py", line 70, in execute_command_with_name
await bot.send_message(message.chat.id, "ошибка, БЗЗ")
AttributeError: 'list' object has no attribute 'chat'
Сам код:
import logging
import string
import bs4
import random
import logging
import wikipediaapi
import webbrowser
import traceback
from aiogram import Bot, Dispatcher, executor, types
logging.basicConfig(level=logging.INFO)
bot = Bot(token='токен')
dp = Dispatcher(bot)
#ответ на команды
@dp.message_handler(commands=['start'])
async def begin(message: types.Message):
await bot.send_message(message.chat.id, "Привет")
@dp.message_handler(commands=['bot'])
async def begin(message: types.Message):
await bot.send_message(message.chat.id, "На месте")
@dp.message_handler(content_types=['text'])
async def get_message(message):
message = message.text.split(" ")
command = message[0]
command_options = [str(input_part) for input_part in message[1:len(message)]]
async def search_for_definition_on_wikipedia(*args: tuple):
if not args[0]: return
search_term = " ".join(args[0])
# установка языка (в данном случае используется язык, на котором говорит ассистент)
wiki = wikipediaapi.Wikipedia("ru")
# поиск страницы по запросу, чтение summary, открытие ссылки на страницу для получения подробной информации
wiki_page = wiki.page(search_term)
try:
if wiki_page.exists():
await bot.send_message(message.chat.id, "Начинаю поиск информации о " + search_term + " на википедии")
# чтение ассистентом первых двух предложений summary со страницы Wikipedia
await bot.send_message(message.chat.id, wiki_page.summary.split(".")[:2])
else:
# открытие ссылки на поисковик в браузере в случае, если на Wikipedia не удалось найти ничего по запросу
await bot.send_message(message.chat.id, "Информация о " + search_term + " не была найдена")
# поскольку все ошибки предсказать сложно, то будет произведен отлов с последующим выводом без остановки программы
except:
await bot.send_message(message.chat.id, "ошибка, БЗЗ")
commands = {
("wikipedia", "definition", "about", "определение", "википедия", "информация", "информация о"): search_for_definition_on_wikipedia,
}
async def execute_command_with_name(command_name: str, args: list):
for key in commands.keys():
if command_name in key:
await commands[key](args)
else:
pass # print("Command not found")
await execute_command_with_name(command, command_options)
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
Ответы (1 шт):
Автор решения: Alpensin
→ Ссылка
message = message.text.split(" ")
Вот это превращает message в обычный list. А у него нет атрибута chat.
Лучше копируйте полный текст ошибки. И сами смотрите на этот текст. Там как правило указывается номер строки и код, который это исключение вызвал.