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

