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

python-telegram-bot中cron定时任务run_custom传参报错求解

报错原因

你的写法存在两个参数传递错误:

  • run_custom方法的第二个位置参数是用于接收调度配置的job_kwargs字典,你直接传入字符串'cron'不符合参数要求
  • cron规则相关的配置(周几、小时、分钟等)不属于run_custom的顶层关键字参数,直接平铺传入就会触发「unexpected keyword argument」报错;另外你还把APScheduler原生的day_of_week参数错写为days
正确实现步骤
  1. 先适配定时任务回调函数格式
    PTB的定时任务回调必须接收context作为唯一入参,v20及以上版本要求回调为异步函数:
from telegram.ext import ContextTypes

async def my_funct(context: ContextTypes.DEFAULT_TYPE):
    # 此处写入原有的业务逻辑即可
    # 如果需要向函数传自定义参数,可以通过context.job.data获取
    pass
  1. 正确调用run_custom添加cron任务
    所有调度相关的配置,包括触发器类型、cron时间规则,全部放到job_kwargs字典内传入:
context.job_queue.run_custom(
    callback=my_funct,
    job_kwargs={
        "trigger": "cron",
        "day_of_week": "mon-fri,sun",
        "hour": "11,15,19,23",
        "minute": 55
    }
)
注意事项
  • 不要在Bot代码内额外初始化APScheduler的BackgroundScheduler实例,PTB的JobQueue已经内置了调度器实例,重复初始化会引发事件循环冲突
  • 如果需要在Bot启动时就加载全局定时任务,建议把添加任务的逻辑写到Application的post_init启动钩子中,无需依赖用户消息触发
  • 如果要给定时任务传递自定义参数,可以在run_custom调用时传入data=你的参数,在回调内通过context.job.data读取即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:42:22