Python报AttributeError:CallbackContext无message属性如何解决
报错根因
AttributeError: 'CallbackContext' object has no attribute 'message' 是python-telegram-bot(PTB)库版本迭代后回调参数规则变更导致,和Python 3.7运行环境无关。
PTB v12及更早版本的消息处理函数签名为def handler(bot, update),第二个参数update直接承载消息、事件数据;v13及之后版本切换为上下文模式,回调函数传参顺序、参数承载内容完全调整,你当前代码里形参定义顺序和新版本不匹配,形参命名为update的位置实际接收到的是CallbackContext实例,自然不存在message属性。
修复方案
- 方案1(推荐,适配官方维护版本):修改代码适配v13+版本规则
- 调整处理函数参数顺序,新签名固定为
def post(update, context),第一个参数为承载事件数据的Update对象,第二个为上下文实例 - 修正消息内容读取逻辑,优先用
update.effective_message读取消息,兼容普通消息、编辑消息等多触发场景 - 移除注册handler时旧版要求的
pass_chat_data=True、pass_user_data=True、pass_bot=True类传参,这类数据在v13+版本中统一挂载在context对象下,无需额外传递
修正后的核心代码如下:
补充:原代码在url赋值前就执行from selenium.webdriver.common.by import By def post(update, context): url = update.effective_message.text.replace("/g ", "") print(url) driver.get(url) # 注:selenium 4+版本已废弃find_element_by_xpath旧写法,同步做了适配 nameele = driver.find_element(By.XPATH, "//*[@class='sqdOP yWX7d _8A5w5 ZIAjV ']")print(url),会触发NameError,修正时直接移除了该行。 - 调整处理函数参数顺序,新签名固定为
- 方案2(快速兼容,无代码改动):降级PTB到最后一个兼容旧签名的版本
执行命令安装指定旧版本即可:
该版本已停止官方维护,仅适合临时快速恢复业务使用,不推荐长期运行。pip install python-telegram-bot==12.8 --force-reinstall
内容的提问来源于stack exchange,提问作者JecksRoss
相关产品推荐
相关产品推荐

