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

基于日期时间调整循环迭代次数:夏令时数据爬取问题修复

问题解决与代码优化

核心问题分析

  • 语法错误:if i == '2020-03-29' 末尾缺少冒号,直接触发SyntaxError。
  • 变量名冲突:内层循环复用i作为变量,覆盖了外层的日期变量,会导致后续迭代逻辑混乱。
  • 数据收集错误:当前代码每次循环仅保留最后一个小时的y值,而非收集当日所有小时的完整数据。
  • 硬编码日期不灵活:仅判断单个夏令时日期,无法覆盖另外两个受影响的日期,且后续夏令时规则变化时需手动修改代码。

优化后的代码

from datetime import date, timedelta
from urllib.request import urlopen
import json

start_date = date(2020, 1, 1)
end_date = date(2022, 11, 1)

def daterange(start_date, end_date):
    for n in range(int((end_date - start_date).days)):
        yield start_date + timedelta(n)

parsing_range_svk = []
for single_date in daterange(start_date, end_date):
    single = single_date.strftime("%Y-%m-%d")
    parsing_range_svk.append(single)

svk = []
for date_str in parsing_range_svk:
    try:
        # 请求并解析目标JSON数据
        response = urlopen(f"https://www.svk.se/services/controlroom/v2/situation?date={date_str}&biddingArea=SE1")
        data_json_svk = json.loads(response.read())
        # 获取当日所有小时级数据的列表
        hourly_data = data_json_svk['Data'][0]['data']
        # 批量提取每个小时的'y'值
        daily_rows = [item['y'] for item in hourly_data]
        svk.append(daily_rows)
    except Exception as e:
        print(f"处理日期 {date_str} 时出错: {str(e)}")
        # 出错时可选择添加空列表或跳过该日期
        svk.append([])

关键优化点说明

  • 修复语法问题:移除硬编码的日期判断,改用动态读取数据长度的方式,同时确保所有代码语法合规。
  • 避免变量冲突:将外层日期变量重命名为date_str,内层用列表推导式简化逻辑,彻底杜绝变量覆盖问题。
  • 完整收集数据:通过列表推导式一次性提取当日所有小时的y值,确保每个日期对应完整的小时数据列表。
  • 自动适配小时数:直接读取返回数据中hourly_data的长度,不管是23还是24小时,都能自动适配,无需手动维护夏令时日期清单。
  • 异常容错处理:增加try-except块,捕获请求失败、JSON解析错误或键不存在等异常,避免程序中途崩溃,同时记录错误信息便于排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:25