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

Python读取CSV中API URL发送GET请求无响应问题求助

问题排查与修复方案

嘿,我帮你梳理了下代码里的问题,这就是为啥终端没输出响应的原因,咱们一个个来解决:

代码里的核心问题

  • 逻辑分支完全错位:你写的elif resp.status_code == 200是和前面的if同级的,但resp变量是在if块里定义的,外面根本访问不到,而且这个判断逻辑也不对——应该在发送请求后立刻检查状态码,而不是放到外部分支里。
  • 变量名重复+解析错误:resp = json.loads(resp)这行完全写错了,你想解析的是请求返回的r的内容,但这里用了还没定义的resp当参数,应该是解析r.text或者直接用requests自带的r.json()方法。
  • 输出位置错误:print(resp.content)放在了错误的分支里,就算逻辑正常,也根本不会执行到。
  • 缺少异常处理:比如CSV里某行列数不够、API URL无效、网络连不上、响应不是合法JSON这些情况,都会导致程序静默失败或者崩溃,你却没做任何捕获处理。

修复后的完整代码

import csv
import requests
import json

# 替换成你实际的headers
headers = {"User-Agent": "Your-Custom-User-Agent"}

with open('xyz.csv', mode='r', newline='', encoding='utf-8') as csvFile:
    reader = csv.reader(csvFile)
    # 如果你的CSV有表头,取消下面这行注释跳过表头
    # next(reader)
    
    # 给每行加上行号,方便定位问题
    for row_num, col in enumerate(reader, start=1):
        try:
            # 先检查当前行是否有足够的列,避免索引越界
            if len(col) < 10:
                print(f"第{row_num}行列数不足,跳过")
                continue
            
            # 处理列值的空白字符,避免因为空格导致条件不匹配
            col2 = col[2].strip().upper()
            col9 = col[9].strip().upper()
            
            if col2 == "Y" and col9 == "Y":
                api_url = col[6].strip()
                print(f"正在请求第{row_num}行的API: {api_url}")
                
                # 发送请求,添加超时避免无限等待
                r = requests.get(api_url, headers=headers, timeout=10)
                # 主动抛出HTTP错误(比如404、500)
                r.raise_for_status()
                
                # 直接解析JSON响应,比json.loads更简洁
                resp = r.json()
                # 输出响应内容
                print(f"第{row_num}行响应结果:\n{resp}\n")
            else:
                print(f"第{row_num}行不满足条件(col2={col2}, col9={col9}),跳过")
        
        # 捕获请求相关的异常(超时、连接失败、HTTP错误等)
        except requests.exceptions.RequestException as e:
            print(f"第{row_num}行请求失败: {str(e)}\n")
        # 捕获JSON解析失败的异常
        except json.JSONDecodeError as e:
            print(f"第{row_num}行响应不是合法JSON: {str(e)}\n")
        # 捕获其他未知异常
        except Exception as e:
            print(f"第{row_num}行发生未知错误: {str(e)}\n")

修复点说明

  1. 修正逻辑结构:把请求、状态码检查、输出都放到了条件满足的if块内部,确保只有符合要求的行才会执行请求流程。
  2. 修复JSON解析:用r.json()直接解析响应,requests会自动处理编码和格式问题,比手动调用json.loads更可靠。
  3. 添加边界检查:先判断行的列数是否足够,避免col[2]或col[9]引发索引越界错误。
  4. 处理空白字符:用.strip()去掉列值前后的空格,避免CSV里的Y(带空格)导致条件判断不成立。
  5. 添加异常捕获:覆盖了请求失败、JSON解析失败等常见场景,程序不会因为某一行出错就中断,还能输出明确的错误信息帮你排查。
  6. 行号标识:用enumerate给每行加上行号,方便你快速定位哪一行出了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:48:25