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
相关产品推荐
相关产品推荐

