You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Telegram Bot启动报错:Updater不支持use_context参数

解决python-telegram-bot中Updater初始化的TypeError问题

问题背景

用户编写了Telegram机器人的Python代码,启动时触发如下报错,且已确认python-telegram-bot版本高于12.0。

报错信息

Traceback (most recent call last):
  File "C:\Users\admin\PycharmProjects\NeoTecnoAlCentroBotPrincipale\.venv\Scripts\Bot.py", line 135, in <module>
    main()
  File "C:\Users\admin\PycharmProjects\NeoTecnoAlCentroBotPrincipale\.venv\Scripts\Bot.py", line 109, in main
    updater = Updater('7498845724:AAEI2GTjXMZgGo3S99iBw_OgoKh7Zshf-Oc', use_context=True)
TypeError: Updater.__init__() got an unexpected keyword argument 'use_context'

原因分析

python-telegram-bot 13.0及以上版本中,use_context参数已被移除——该版本开始默认启用Context对象,无需手动指定此参数。代码中保留了过时参数,导致初始化失败。

解决方案

1. 移除过时的use_context参数

修改main函数中的Updater初始化代码:
原代码:

updater = Updater('7498845724:AAEI2GTjXMZgGo3S99iBw_OgoKh7Zshf-Oc', use_context=True)

修改后:

updater = Updater('7498845724:AAEI2GTjXMZgGo3S99iBw_OgoKh7Zshf-Oc')

2. 修复其他版本兼容问题

代码中还有几处需适配新版本:

  • 过滤器名称修正:将Filters.command改为filters.COMMAND(新版本中过滤器模块为小写filters)
  • 移除冗余参数:CommandHandler中的pass_args=True已被移除,直接删除该参数(新版本context.args默认可用)
  • 补充缺失函数:添加未定义的start函数:
    def start(update: Update, context: CallbackContext) -> None:
        update.message.reply_text('Bot avviato correttamente!')
    
  • 删除重复表创建语句:重复创建comandi表的语句会覆盖原有表结构,删除第二行创建comandi表的代码:
    # 删除此行:c.execute('''CREATE TABLE IF NOT EXISTS comandi (user_id integer, username text)''')
    
  • 修正权限判断逻辑:invia_privato函数中,错误地用用户名对比用户ID,修改为:
    # 原代码:if update.message.from_user.username == ID_USER_PRINCIPALE:
    if str(update.message.from_user.id) == ID_USER_PRINCIPALE:
    

最终修改后的main函数示例

def main() -> None:
    """Avvia il bot."""
    updater = Updater('7498845724:AAEI2GTjXMZgGo3S99iBw_OgoKh7Zshf-Oc')

    # Ottieni il dispatcher per registrare i gestori
    dp = updater.dispatcher

    # su differenti comandi - rispondi in Telegram
    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("crea_comando", crea_comando))
    dp.add_handler(CommandHandler("autorizza_utente", autorizza_utente))
    dp.add_handler(CommandHandler("tagga_utenti", tagga_utenti))
    dp.add_handler(CommandHandler("invia_privato", invia_privato))
    dp.add_handler(ChatMemberHandler(aggiorna_utente, ChatMemberHandler.CHAT_MEMBER_UPDATED))
    dp.add_handler(ChatMemberHandler(rimuovi_utente, ChatMemberHandler.CHAT_MEMBER_UPDATED))

    # su messaggi non comando - rispondi con lo stesso messaggio in Telegram
    dp.add_handler(MessageHandler(filters.COMMAND, echo))

    # Avvia il Bot
    updater.start_polling()

    # Esegui il bot fino a quando non si preme Ctrl-C o il processo non riceve SIGINT,
    # SIGTERM o SIGABRT. Questo dovrebbe essere usato maggiormente per l'esecuzione del bot
    # in background.
    updater.idle()

内容的提问来源于stack exchange,提问作者Domenico Aiello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:48:10