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

开发Python Telegram Bot时update未定义的NameError该如何解决

报错原因及修复方案

核心报错原因

  • 变量未定义:你使用的pyTelegramBotAPI库中,@bot.message_handler装饰的回调函数传入的参数是message对象,你代码里的update变量没有被定义也没有作为参数传入,所以触发NameError。
  • 库混用:你同时导入了telebot(pyTelegramBotAPI库)和telegram.ext(python-telegram-bot库)的相关组件,这是两个完全独立的Telegram Bot开发库,API逻辑完全不兼容,多余的导入可以直接删除。
  • 逻辑错误:你想实现「收到/Set命令后提示用户输入,再获取用户后续输入内容处理」的逻辑,不能在同一个命令响应函数里直接获取后续输入,需要使用register_next_step_handler注册下一步的消息处理函数。
  • 命名冲突:原函数名set是Python内置数据类型的关键字,直接用作函数名会存在潜在隐患。

修复后的完整代码

import telebot

API_KEY = "你的Bot API密钥"
bot = telebot.TeleBot(API_KEY)

def do_something(user_input):
    answer = "You have wrote me " + user_input
    return answer

# 处理/Set命令的函数
@bot.message_handler(commands=["Set"])
def set_command(message):
    bot.send_message(message.chat.id, "Please enter the word")
    # 注册下一步收到用户消息时触发的处理函数
    bot.register_next_step_handler(message, handle_user_input)

# 处理用户后续输入的函数
def handle_user_input(message):
    # 直接从传入的message对象拿用户输入的文本
    user_input = message.text
    # 回复用户
    bot.send_message(message.chat.id, do_something(user_input))

if __name__ == '__main__':
    bot.polling(none_stop=True)

修改说明

  • 删除了冗余的不兼容库导入,只保留pyTelegramBotAPI的telebot导入
  • 新增了单独的后续输入处理函数handle_user_input,通过register_next_step_handler绑定在/Set命令的响应流程之后
  • 所有消息内容都直接从回调函数传入的message对象获取,没有使用未定义的update变量
  • 将原函数名set修改为set_command,避免和Python内置的set类型冲突
  • 增加了none_stop=True参数避免偶发的网络波动导致bot停止运行

内容的提问来源于stack exchange,提问作者Gürbüz Kutay TÜRKOĞLU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 20:39:02