Python实现每月任务调度报错求助:类型不匹配问题排查
问题解决:Windows任务调度每月触发器类型不匹配错误
错误原因
你遇到的pywintypes.com_error: (-2147352571, 'Type mismatch.', None, 1)错误,核心原因是:
- 针对每月触发器(TASK_TRIGGER_MONTHLY),
DaysOfWeek和WeeksOfMonth属性不接受Python原生列表,必须传入位掩码整数; - 未指定正确的每月触发器子类型,导致调度器无法识别触发规则逻辑。
修正步骤
- 指定每月触发器子类型:设置
trigger.MonthlyTriggerType = 1,对应TASK_TRIGGER_MONTHLY_DOW(按星期几+周数触发的每月规则)。 - 转换星期数为位掩码:
Windows任务调度中星期几的位掩码对应关系:- 周日=1,周一=2,周二=4,周三=8,周四=16,周五=32,周六=64
你需要的周二、周三、周四对应的位掩码总和为4 + 8 + 16 = 28。
- 周日=1,周一=2,周二=4,周三=8,周四=16,周五=32,周六=64
- 转换周数为位掩码:
每月周数的位掩码对应关系:- 第1周=1,第2周=2,第3周=4,第4周=8,第5周=16
你需要的第1-4周对应的位掩码总和为1 + 2 + 4 + 8 = 15。
- 第1周=1,第2周=2,第3周=4,第4周=8,第5周=16
修正后的代码片段
替换原代码中设置触发器属性的部分:
trigger.StartBoundary = set_time.isoformat() trigger.Enabled = True # 新增:指定每月触发器为按周+星期几的类型 trigger.MonthlyTriggerType = 1 # 用位掩码代替列表 trigger.DaysOfWeek = 28 # Tuesday(4) + Wednesday(8) + Thursday(16) trigger.WeeksOfMonth = 15 # 第1-4周 trigger.Months = 4095 # 1-12月的位掩码总和,等价于1+2+4+...+2048
补充说明
Months属性用位掩码4095可以直接覆盖1-12月,比逐个写月份列表更简洁;- 若需按特定日期(而非星期)触发每月任务,需将
MonthlyTriggerType设为2(TASK_TRIGGER_MONTHLY_DATE),并设置DaysOfMonth属性(同样支持位掩码)。
内容的提问来源于stack exchange,提问作者somesh
相关产品推荐
相关产品推荐

