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

python-telegram-bot的ConversationHandler状态异常导致回调不触发问题求助

问题根因

你代码中定义的三个对话状态常量NAME、GENDER、AGE被赋值为了相同的整数0,而Python字典的键具有唯一性,你传入ConversationHandler的states参数在初始化时,后面的键值对会覆盖前面的,最终states中仅保留键为0对应的finish_handler,所以用户输入姓名后会直接触发最终的注册成功逻辑。

修复方案
  1. 调整状态常量的赋值,确保每个状态值唯一:
# 将原有赋值替换为以下内容
NAME, GENDER, AGE = 0, 1, 2
  1. (可选优化)当前你使用全局字典user_data存储用户信息,多用户同时注册时会出现数据覆盖问题,建议改用python-telegram-bot内置的context.user_data存储单用户私有数据,修改后各handler的示例如下:
def name_handler(update: Update, context):
    context.user_data["name"] = update.message.text
    update.message.reply_text("enter ur gender")
    return GENDER

def age_handler(update: Update, context):
    context.user_data["gender"] = update.message.text
    update.message.reply_text("enter ur age")
    return AGE

def finish_handler(update: Update, context):
    context.user_data["age"] = update.message.text
    update.message.reply_text(f"registered successfully, you are {context.user_data['name']}, {context.user_data['gender']}, {context.user_data['age']}")
    return ConversationHandler.END

内容的提问来源于stack exchange,提问作者Y.dffu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:36:03