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

Python脚本while True循环当日无法终止的修复方案咨询

解决循环未终止的问题及替代实现方案

我来帮你搞定这个循环停不下来的问题~

问题出在哪?

你这段代码的核心bug是类型不匹配:from_date是带时分秒的datetime.datetime对象,而datetime.date.today()返回的是只有年月日的datetime.date对象。两种不同类型的对象永远不会相等,所以if from_date == datetime.date.today()这个条件永远触发不了,循环自然停不下来。

快速修复方案

只需要把两者的类型统一后再比较就行,两种方法任选:

方法1:把from_date转成date类型

修改判断条件,提取from_date的日期部分再和今日日期比较:

import datetime

delta = 0
while True:
    from_date = datetime.datetime.strptime('2018-03-25', '%Y-%m-%d') + datetime.timedelta(days=delta)
    data_date = from_date.strftime('%Y-%m-%d')
    # 关键修改:转为date类型再比较
    if from_date.date() == datetime.date.today():
        break
    delta += 1
    # 在这里添加你的数据导出逻辑

方法2:把今日日期转成datetime类型

如果需要更严格的时间比较(不过你的场景其实不需要),可以把今日日期转成包含时分秒的datetime对象:

if from_date >= datetime.datetime.combine(datetime.date.today(), datetime.time.min):
    break

更简洁的替代实现

其实没必要用while循环加delta的方式,用日期范围迭代会更清晰易懂,给你两种更优雅的写法:

写法1:逐天遍历日期

import datetime

start_date = datetime.date(2018, 3, 25)
end_date = datetime.date.today()

current_date = start_date
# 只遍历到昨日,不包含今日
while current_date < end_date:
    data_date = current_date.strftime('%Y-%m-%d')
    # 执行你的数据导出操作
    print(f"导出日期:{data_date}")
    current_date += datetime.timedelta(days=1)

写法2:计算总天数后用for循环

import datetime

start_date = datetime.date(2018, 3, 25)
end_date = datetime.date.today()
# 计算起始日到今日的总天数差
total_days = (end_date - start_date).days

for delta in range(total_days):
    current_date = start_date + datetime.timedelta(days=delta)
    data_date = current_date.strftime('%Y-%m-%d')
    # 执行你的数据导出操作
    print(f"导出日期:{data_date}")

这两种写法不仅避免了类型不匹配的问题,代码逻辑也更直观,后续维护起来更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:23