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

嵌套循环生成URL列表异常:仅处理首个国家的问题排查

问题原因与修复方案

问题根源

你的代码里start_date变量在处理第一个国家(france)的循环中被持续累加,当处理完france的所有日期后,start_date已经变成2019-04-06,超过了设定的end_date(2019-04-05)。后续处理germany和spain时,while start_date <= end_date的条件不成立,内部的日期、小时循环完全不会执行,所以最终列表里只有france的URL。

修复方案

有两种简单的修复方式:

方式一:每次处理新国家时重置起始日期

把start_date的初始化移到国家循环内部,确保每个国家都从初始日期开始遍历:

import datetime

end_date = datetime.date(2019, 4, 5)
delta = datetime.timedelta(days=1)

list_of_urls = []
list_of_countries = ['france', 'germany', 'spain']

for country in list_of_countries:
    # 每个国家处理前重置起始日期
    start_date = datetime.date(2019, 4, 4)
    while start_date <= end_date:
        for hour in range(24):
            # 用f-string拼接URL更简洁
            url = f'https://thewebsite.com/{country}/{start_date.strftime("%Y-%m-%d")}/{hour}/'
            list_of_urls.append(url)
        start_date += delta 

print(list_of_urls)

方式二:预先生成所有日期列表

先把需要处理的日期一次性生成好,再遍历日期列表,避免修改原始起始日期变量:

import datetime

start_date = datetime.date(2019, 4, 4)
end_date = datetime.date(2019, 4, 5)
delta = datetime.timedelta(days=1)

# 预先生成所有要处理的日期
dates = []
current_date = start_date
while current_date <= end_date:
    dates.append(current_date)
    current_date += delta

list_of_urls = []
list_of_countries = ['france', 'germany', 'spain']

for country in list_of_countries:
    for date in dates:
        for hour in range(24):
            url = f'https://thewebsite.com/{country}/{date.strftime("%Y-%m-%d")}/{hour}/'
            list_of_urls.append(url)

print(list_of_urls)

两种方式都能让三个国家的所有日期、小时对应的URL都被生成,第二种方式的逻辑更清晰,也不容易出现变量修改导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:32