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

Python Telegram Bot设置pass_job_queue=True仍缺失job_queue参数如何解决

报错原因

你遇到的报错是因为python-telegram-bot库版本和代码适配版本不匹配:

  • 你复制的代码适配v11及更早的库版本,这类版本支持通过pass_job_queue=True参数将job_queue作为独立的位置参数注入回调函数,和你定义的time(bot, update, job_queue)参数顺序是匹配的。
  • 你本地安装的是v12及以上的库版本,这类版本默认开启上下文回调模式,所有附加对象都会封装在context参数中传递,不会再单独注入job_queue作为位置参数,因此哪怕你配置了pass_job_queue=True也不会生效,自然提示缺少参数。

修复方案

方案1(推荐):适配新版本写法调整代码

直接修改回调函数适配新版上下文模式,不需要再配置pass_*类参数:

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, InlineQueryHandler


def sayhi(context):
    job = context.job
    job.context.message.reply_text("hi")

def time(update, context):
    # 从context中直接获取job_queue
    context.job_queue.run_repeating(sayhi, 5, context=update)

def main():
    updater = Updater('替换为你的实际BotKey')
    dp = updater.dispatcher
    dp.add_handler(MessageHandler(Filters.text , time))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

方案2:沿用旧代码逻辑,关闭上下文模式

如果你不想调整原有代码结构,只需要在初始化Updater时添加use_context=False参数,就能让pass_job_queue=True配置生效:

# 仅修改这一行初始化代码即可,其余代码保持不变
updater = Updater('替换为你的实际BotKey', use_context=False)

如果你的库是v20及以上的最新版本,上述方案会不兼容,建议先执行pip install python-telegram-bot==13.7降级到v13版本再使用上述修复方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 12:15:03