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

Python Telegram Bot中user_data变量输出异常显示顺序数字问题

问题根因

你输出的是对话流程用的状态常量本身,根本没有读取实际存储的用户输入内容:

  • 开头定义的FROM, TO, SEND, REVIEW = range(4)是用来标记对话步骤的枚举值,本身值就是0、1、2、3,你在输出的f-string里直接写{FROM}/{TO},打印出来的自然就是0、1这两个常量的数值。
  • 你自己全局定义的空字典user_data = {}是无效的,python-telegram-bot框架会为每个独立用户维护单独的隔离存储空间context.user_data,用全局字典存用户数据还会出现多用户数据串号、互相覆盖的问题。
修复步骤
  1. 所有存储用户输入的逻辑,都往框架提供的context.user_data里写,比如你之前的赋值语句要改成:
context.user_data[TO] = update.message.text
# 存储FROM字段同理,使用context.user_data[FROM] = 对应获取到的值
  1. 输出内容时,从context.user_data里取对应键的存储值,不要直接引用状态常量,修正后的处理函数代码如下:
def review_handler(update: Update, context: CallbackContext):
    user_data = context.user_data
    update.message.reply_text(
        '*Review your Details* \n\n'
        f'Data1: {user_data.get(FROM, "未填写")} \n'
        f'Data2: {user_data.get(TO, "未填写")} \n\n'
        'Press /yes to proceed and /cancel to exit',
        parse_mode='MarkdownV2'
    )

补充说明:如果用户输入的内容包含MarkdownV2的特殊字符(比如_、*、[、(等),直接拼接会导致消息发送报错,需要先对用户输入的内容做转义处理;如果不需要特殊文本格式,也可以去掉parse_mode参数,用普通文本输出即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:39:39