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

python-telegram-bot报错:Updater对象无add_handler属性的解决方法

解决python-telegram-bot中Updater无add_handler属性的问题

你在使用最新版python-telegram-bot时遇到报错'Updater' object has no attribute 'add_handler',相关代码及导入语句如下:

原代码

def main() -> None:
    update_queue = queue.Queue()
    bot_token = "token"

    bot = Bot(token=bot_token)
    updater = Updater(
        bot=bot,
        update_queue=update_queue
    )

    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('book', book_appointment)],
        states={
            NAME: [MessageHandler(filters.TEXT & (~filters.COMMAND), book)],
            PHONE: [MessageHandler(filters.TEXT & (~filters.COMMAND), phone)],
            EMAIL: [MessageHandler(filters.TEXT & (~filters.COMMAND), email)],
            ISSUE: [MessageHandler(filters.TEXT & (~filters.COMMAND), issue)],
            TIME: [MessageHandler(filters.TEXT & (~filters.COMMAND), time)],
        },
        fallbacks=[CommandHandler('start', start)],
    )

    updater.add_handler(conv_handler)
    updater.add_handler(CommandHandler("info", info))

    updater.start_polling()

    updater.idle()

if __name__ == '__main__':
    main()

导入语句

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackContext, CallbackQueryHandler, ConversationHandler, MessageHandler, filters
import queue
from telegram import Bot

解决方案

问题源于python-telegram-bot v20及以上版本的API变更:Updater类不再直接提供add_handler方法,需要通过其内部的dispatcher对象添加处理器,同时新版可以简化Updater的初始化逻辑。

修改后的代码

def main() -> None:
    bot_token = "token"

    # 新版无需手动创建Bot和queue,直接传入token即可初始化Updater
    updater = Updater(token=bot_token)

    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('book', book_appointment)],
        states={
            NAME: [MessageHandler(filters.TEXT & (~filters.COMMAND), book)],
            PHONE: [MessageHandler(filters.TEXT & (~filters.COMMAND), phone)],
            EMAIL: [MessageHandler(filters.TEXT & (~filters.COMMAND), email)],
            ISSUE: [MessageHandler(filters.TEXT & (~filters.COMMAND), issue)],
            TIME: [MessageHandler(filters.TEXT & (~filters.COMMAND), time)],
        },
        fallbacks=[CommandHandler('start', start)],
    )

    # 通过dispatcher对象添加处理器
    updater.dispatcher.add_handler(conv_handler)
    updater.dispatcher.add_handler(CommandHandler("info", info))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

关键修改点

  • 将updater.add_handler(...)替换为updater.dispatcher.add_handler(...)
  • 简化Updater初始化:直接传入token参数,新版会自动处理Bot实例和消息队列的创建

内容的提问来源于stack exchange,提问作者Polina Ivy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:13