Частые ошибки python-telegram-bot на Python и особенности разницы версий v 13 и 20
Ошибки при старой версии python-telegram-bot до 13.0
Частая проблема в версиях любых фреймворков и библиотек касаются и python-telegram-bot. Начиная с 13.0 версии изменились некоторые команды. А если использовать 20.0 версию python-telegram-bot, то их становится еще больше.
А как видно из названия “чатджипити” выдает старый код и в новой версии библиотеки он часто не работает. Самый простой способ, это понизить версию библиотеки с помощью pip install:
pip install python-telegram-bot==12.0.0b1 --upgrade
Либо сначала удалить старую и установить нужную:
pip uninstall python-telegram-bot
pip install python-telegram-bot==12
Ошибка ‘use_context’
Если у вас возникла подобная ошибка:
updater = Updater(bot=bot, use_context = True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: Updater.__init__() got an unexpected keyword argument 'use_context'
PS E:\xxxx\xxxx> & C:/Users/Big-users/AppData/Local/Programs/Python/Python311/python.exe e:/xxxx/xxxx/bot.py
Traceback (most recent call last):
В этом случае можете просто удалить аргумент ‘use_context’
Было:
updater = Updater("YOUR TOKEN HERE",use_context=True)
Стало:
updater = Updater("YOUR TOKEN HERE")
Но как правило на этом не закончатся ошибки.
Ошибка ‘update_queue’
Если у вас возникла подобная ошибка:
Traceback (most recent call last):
File "E:\xxxx\xxxx\bot.py", line 113, in <module>
updater = Updater(bot=bot)
^^^^^^^^^^^^^^^^
TypeError: Updater.__init__() missing 1 required positional argument: 'update_queue'
Ошибка возникает из-за того, что в версии python-telegram-bot
13.0.0 и выше, конструктор класса Updater
не принимает аргумент token
. Вместо этого, токен должен быть передан в качестве аргумента при создании объекта telegram.Bot
.
Для решения этой проблемы, вам нужно изменить код в файле gobot.py
, чтобы передать токен при создании объекта telegram.Bot
, а затем передать этот объект в качестве аргумента при создании объекта Updater
.
Вот пример кода, который вы можете использовать:
import telegram
from telegram.ext import Updater, CommandHandler
# Здесь вы можете определить переменную, содержащую токен вашего бота
TOKEN = 'your_bot_token_here'
# Создаем объект telegram.Bot с использованием токена
bot = telegram.Bot(token=TOKEN)
# Создаем объект Updater, передавая ему объект bot в качестве аргумента
updater = Updater(bot=bot, use_context=True)
# Определяем обработчик команды /start
def start(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="Hello, World!")
# Регистрируем обработчик команды /start
updater.dispatcher.add_handler(CommandHandler('start', start))
# Запускаем бота
updater.start_polling()
updater.idle()
Обратите внимание, что в этом примере мы передаем объект context
в функцию обработчика команды start
, а затем используем его для отправки сообщения. Это связано с тем, что в версии python-telegram-bot
13.0.0 и выше, объект context
используется вместо объекта telegram.ext.CallbackContext
.
Проблема решена
Проблема решена следующим способом:
# удаляем установленую версию
pip uninstall python-telegram-bot
# ставим последнюю многопоточную версию python-telegram-bot
pip install python-telegram-bot==13.15 -U
В некоторых случаях поможет установка с другими параметрами:
python3 -m pip install python-telegram-bot==13.15 -U
# или
pip install python-telegram-bot==13.15
Список распространенных ошибок, которые могут возникнуть при работе с Python-telegram-bot:
- Ошибки синтаксиса Python: Это может быть связано с неправильным использованием синтаксиса Python, например, неправильным использованием скобок, операторов или неправильным форматированием строк.
- Ошибки конфигурации бота: Это может быть связано с неправильной настройкой бота, например, неправильным указанием токена бота или неправильной настройкой обработчиков сообщений.
- Ошибки обработки ошибок: Это может быть связано с неправильной обработкой ошибок, например, когда бот не обрабатывает исключения, которые могут возникнуть при выполнении определенных операций.
- Ошибки взаимодействия с Telegram API: Это может быть связано с проблемами взаимодействия с API Telegram, например, когда бот не может отправить сообщение или получить информацию о пользователе.
- Ошибки, связанные с работой в многопоточной среде: Это может быть связано с проблемами, возникающими при работе в многопоточной среде, например, когда бот не может правильно обрабатывать сообщения, полученные от разных пользователей одновременно.
Вывод
Основная разница между версиями 13.0 и 20.0 заключается в том, что версия 20.0 включает множество новых функций и улучшений, которые были отсутствуют в версии 13.0. Рассмотрим плюсы и минусы каждой версии.
Python-telegram-bot 13.0
Плюсы:
- Имеет достаточный набор функций для большинства задач, связанных с созданием телеграм-ботов.
- Устойчивая версия с множеством постоянных обновлений.
- Используется широким сообществом и обладает известной документацией.
Минусы:
- Некоторые функции в ней были устаревшими, а определенные улучшения и функции, которые были включены в более новые версии, отсутствуют.
- Необходимость использования множества дополнительных сторонних библиотек и плагинов для реализации некоторых функций.
Python-telegram-bot 20.0
Плюсы:
- Включает множество новых функций и усовершенствований, таких как более гибкая и более простая в использовании конфигурация бота.
- Многопоточность, которая избавляет разработчиков ботов от необходимости заботиться о многопоточности вручную.
- Встроенные функции контроля версий.
Минусы:
- Некоторые функции могут не работать так, как ожидалось, в случае если разработчик не обновит свой код к новым API.
- В процессе работы с новым фреймворком у разработчиков может возникнуть некоторая необходимость изучения новых функций, которые были добавлены в новые версии.
Таким образом, при выборе между версиями 13.0 и 20.0 нужно руководствоваться необходимостью реализации конкретной функции или набора функций. Если вам нужен базовый набор функций, то версия 13.0 подойдет. Если вы хотите использовать более новые функции и усовершенствования, то следует использовать версию 20.0.
Еще можно добавить, если вы новичок, то точно не стоит выбирать двадцатую версию библиотеки. В этом случае вы можете закопаться в ошибках на ровном месте.
А с какими ошибками вы встречались в данной библиотеке? Пишите в комментариях …