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,用全局字典存用户数据还会出现多用户数据串号、互相覆盖的问题。
修复步骤
- 所有存储用户输入的逻辑,都往框架提供的
context.user_data里写,比如你之前的赋值语句要改成:
context.user_data[TO] = update.message.text # 存储FROM字段同理,使用context.user_data[FROM] = 对应获取到的值
- 输出内容时,从
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
相关产品推荐
相关产品推荐

