如何使用for循环生成季度日期?修改代码时遇月份范围报错
问题分析与解决
错误原因
原代码遍历range(12)生成12次循环,当m取10、11时,m+3会得到13、14,超出datetime要求的1..12月份范围,直接触发ValueError。另外,季度一年仅4个,没必要遍历12次,属于逻辑冗余。
正确修改方案
方案1:直接遍历季度起始月份
季度的起始月份固定为1、4、7、10,直接循环这四个值即可:
import datetime list_of_quarters = [] for y in range(2023, 2027): # 遍历每个季度的起始月份 for m in [1, 4, 7, 10]: # 保留原逻辑:2026年仅保留第一个季度 if y == 2026 and m > 1: continue list_of_quarters.append(datetime.datetime(year=y, month=m, day=1).strftime('%Y-%m-%d'))
方案2:通过循环索引计算季度月份
用range(4)遍历4个季度,通过索引计算对应起始月份,逻辑更清晰:
import datetime list_of_quarters = [] for y in range(2023, 2027): # 一年4个季度,循环4次 for q_idx in range(4): quarter_month = q_idx * 3 + 1 # 对应原逻辑:2026年仅保留第一个季度(索引0) if y == 2026 and q_idx > 0: continue list_of_quarters.append(datetime.datetime(year=y, month=quarter_month, day=1).strftime('%Y-%m-%d'))
额外说明
- 修正了原代码的拼写错误:
qaurters改为quarters - 保留了原逻辑中2026年仅保留第一个周期的判断,若需求变更可直接删除该
if语句
内容的提问来源于stack exchange,提问作者nox
相关产品推荐
相关产品推荐

