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

使用python-telegram-bot的ConversationHandler时context.user_data取值为None

解决python-telegram-bot中context.user_data取值为None的问题

针对你遇到的context.user_data中存储的fullname、email、notes取值为None,但最后回调的公司数据正常的问题,可能的原因和排查方向如下:

  • 检查状态处理函数的返回值与状态流转
    确保每个FSM状态(FULLNAME、EMAIL、NOTES)对应的处理函数,在完成赋值后正确返回了下一个状态。比如:

    def fullname_handler(update, context):
        context.user_data['fullname'] = update.message.text
        # 必须返回下一个状态,否则会话会终止,user_data无法保留到后续步骤
        return EMAIL
    

    如果返回ConversationHandler.END或者未正确返回状态,会话会提前结束,后续步骤无法访问之前存储的user_data。

  • 核对键名的拼写一致性
    检查存储和取值时的键名是否完全一致,比如存的时候用context.user_data['fullname'],取的时候不要写成context.user_data['FullName']或者context.user_data['name'],大小写或拼写错误会导致取不到值。

  • 确认CallbackQuery处理函数的上下文正确性
    如果最终的CallbackQuery是在会话流程内触发的,确保它属于ConversationHandler的states或fallbacks配置中,这样处理函数才能正确获取当前会话的context。若CallbackQueryHandler独立于ConversationHandler配置,可能无法访问会话内的user_data,这种情况需要把它加入到ConversationHandler的对应状态中。

  • 排查是否有代码意外清空user_data
    检查所有处理函数中是否存在context.user_data.clear()或者对context.user_data重新赋值的操作(比如context.user_data = {}),这类操作会清空之前存储的数据。

  • 验证ConversationHandler的配置
    确认ConversationHandler的states字典中正确包含了所有需要的状态,并且每个状态对应的handler配置正确。比如:

    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('start', start_handler)],
        states={
            FULLNAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, fullname_handler)],
            EMAIL: [MessageHandler(filters.TEXT & ~filters.COMMAND, email_handler)],
            NOTES: [MessageHandler(filters.TEXT & ~filters.COMMAND, notes_handler)],
            # 确保包含公司选择的回调处理状态
            COMPANY: [CallbackQueryHandler(company_handler)]
        },
        fallbacks=[CommandHandler('cancel', cancel_handler)]
    )
    

    若某个状态未被正确加入states,对应的处理函数无法参与会话流转,user_data的存储也不会生效。

内容的提问来源于stack exchange,提问作者Dmitri Supov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:17:39