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

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+版本规则
    1. 调整处理函数参数顺序,新签名固定为def post(update, context),第一个参数为承载事件数据的Update对象,第二个为上下文实例
    2. 修正消息内容读取逻辑,优先用update.effective_message读取消息,兼容普通消息、编辑消息等多触发场景
    3. 移除注册handler时旧版要求的pass_chat_data=True、pass_user_data=True、pass_bot=True类传参,这类数据在v13+版本中统一挂载在context对象下,无需额外传递
      修正后的核心代码如下:
    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 ']")
    
    补充:原代码在url赋值前就执行print(url),会触发NameError,修正时直接移除了该行。
  • 方案2(快速兼容,无代码改动):降级PTB到最后一个兼容旧签名的版本
    执行命令安装指定旧版本即可:
    pip install python-telegram-bot==12.8 --force-reinstall
    
    该版本已停止官方维护,仅适合临时快速恢复业务使用,不推荐长期运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:24:21