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

Python遍历列表遇连接错误时如何保持循环执行的技术问题

问题修复:让脚本遍历所有ID不中断

嘿,我帮你定位到问题所在了——当前代码在某个ID触发get_data()里的异常后,虽然函数内部捕获了异常,但返回的是布尔值False,之后你尝试调用data.json()时,会因为False没有json()方法抛出AttributeError,直接导致整个循环停止,没法处理后面的ID。

下面是修改后的完整代码,以及关键改动的说明:

修改后的主循环代码

id_list = [1, 2, 3]
for id in id_list:
    data = get_data(id)
    # 先判断是否拿到了有效的响应对象
    if isinstance(data, requests.Response):
        try:
            data_json = data.json()
            # 检查返回数据和任务状态
            if data_json and data_json.get('job_status') == 'SUCCESS':
                # 这里写你要执行的业务逻辑
                print(f"✅ 成功处理ID {id}")
            else:
                print(f"⚠️ ID {id} 的任务状态不是SUCCESS或无有效返回数据")
        except ValueError:
            # 处理返回内容不是合法JSON的情况
            print(f"❌ ID {id} 返回的内容无法解析为JSON")
    else:
        print(f"❌ ID {id} 未找到或获取数据失败")

修改后的get_data()函数

def get_data(form_id):
    try:
        print("------- Getting data from Source. Please wait. -------\n")
        # 注意:这里要补充你实际发起请求的代码,比如:
        # response = requests.get(f"your_api_endpoint/{form_id}")
        response.raise_for_status()
        print(response.content)
        return response
    except (RuntimeError, TypeError, NameError, snowCtx.connection.errors.Error, requests.exceptions.HTTPError) as e:
        error_msg = f"******* Error from Source (GETTING DATA): *******\n{str(e)} on form id: {str(form_id)}"
        print(error_msg)
        print(error_msg, file=logfile)
        # 异常时返回None,更清晰区分失败和有效响应
        return None

关键改动点说明

  • 优化异常返回值:把get_data()异常时的返回值从False改为None,这样在主循环里能更明确地判断是否拿到了有效响应,避免后续调用json()出错。
  • 增加类型校验:主循环里先判断data是不是requests.Response对象,再执行后续的JSON解析和状态判断,确保只有有效响应才会进入业务逻辑分支。
  • 捕获JSON解析异常:新增ValueError捕获逻辑,防止接口返回非JSON格式内容时抛出异常中断循环。
  • 修复日志冗余:原代码里日志打印重复了str(e),已经修正,避免日志内容混乱。
  • 简化函数逻辑:移除了冗余的survey_found变量,直接返回响应或None,代码更简洁易读。

这样修改后,不管列表里哪个ID出现问题,脚本都会处理完当前ID的错误,然后继续遍历下一个ID,不会中途停止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:46:26