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

如何实现带多步重试的URL CSV文件读取异常处理逻辑?

解决CSV文件404时的日期递增重试读取问题

下面是实现需求的Python代码,核心通过try-except捕获404错误,按规则递增日期重试,最多尝试3次(原日期+加1天+加2天),成功后立即终止:

import pandas as pd
from urllib.error import HTTPError
from datetime import datetime, timedelta

def load_csv_with_retry(base_url, target_date_str, max_retries=3):
    # 把输入的日期字符串转成datetime对象,方便后续加减天数
    target_date = datetime.strptime(target_date_str, "%Y%m%d")
    
    # 循环尝试:0次(原日期)到max_retries次(加max_retries天)
    for retry_count in range(max_retries + 1):
        current_attempt_date = target_date + timedelta(days=retry_count)
        current_date_str = current_attempt_date.strftime("%Y%m%d")
        full_csv_url = f"{base_url}/{current_date_str}.csv"
        
        try:
            # 尝试读取CSV并转成DataFrame
            df = pd.read_csv(full_csv_url)
            print(f"✅ 成功读取:{full_csv_url}")
            return df
        except HTTPError as e:
            if e.code == 404:
                if retry_count < max_retries:
                    print(f"❌ {full_csv_url} 不存在(404),下次尝试日期:{current_attempt_date + timedelta(days=1).strftime('%Y%m%d')}")
                else:
                    print(f"❌ 已重试{max_retries}次,所有日期的文件均无法找到")
                    # 所有尝试失败时,返回None供调用方判断,也可根据需求抛出自定义异常
                    return None
            else:
                # 非404的HTTP错误(如500、403),直接抛出不重试
                raise

# ------------------------
# 示例调用
# ------------------------
if __name__ == "__main__":
    # 替换成你的实际基础URL
    base_url = "https://your-domain.com/data-files"
    # 你最初想要尝试的日期
    initial_target_date = "20240601"
    
    df = load_csv_with_retry(base_url, initial_target_date)
    
    if df is not None:
        # 读取成功后的后续处理
        print("DataFrame预览:")
        print(df.head())
    else:
        # 所有重试失败后的处理逻辑,比如记录日志、告警等
        print("无法获取有效CSV文件,请检查日期范围或URL配置")

关键逻辑说明

  1. 日期递增规则:

    • 第1次尝试:传入的原日期(对应示例中的madels.csv)
    • 第2次尝试:原日期+1天(对应modals.csv)
    • 第3次尝试:原日期+2天(对应medals.csv)
    • 最多尝试3次(含原日期),符合需求中的「最多3天」要求
  2. 异常处理边界:

    • 只针对HTTPError 404做重试,其他HTTP错误(如服务器错误500、权限错误403)直接抛出,避免无效重试
    • 每次失败后打印提示,最后一次失败返回None,方便调用方做后续处理
  3. 终止逻辑:

    • 一旦成功读取到CSV文件,立刻return终止循环,不会继续尝试后续日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:57:33