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

Python中requests.get无响应导致city变量未定义如何解决?

问题排查与解决方案

核心原因分析

  • 绝大多数公开API会拦截默认UA的requests请求:requests默认发送的请求头User-Agent值为python-requests/版本号,很容易被服务端识别为非浏览器请求直接拦截,浏览器访问时会携带合法UA因此可以正常返回数据
  • 原代码没有做请求成功校验、异常捕获:请求失败时返回的内容不是合法JSON,或返回空数组,都会导致后续变量赋值失败,触发city未定义的报错

修复步骤

  1. 首先添加模拟浏览器的User-Agent请求头,绕过服务端的反爬校验
  2. 新增请求状态校验,确认请求返回200状态码后再解析内容
  3. 用requests内置的.json()方法替代手动json.loads,减少冗余代码
  4. 新增异常捕获逻辑,处理API返回空数组、请求失败等边界情况

修复后的代码示例

import requests
import json

# 配置请求头,模拟Chrome浏览器访问,可根据自己的浏览器UA修改
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

try:
    api_request = requests.get(
        "https://www.airnowapi.org/aq/observation/zipCode/current/?format=application/json&zipCode=12345&distance=5&API_KEY=1234-1234-1234-1234",
        headers=headers,
        timeout=10 # 添加超时时间,避免无限等待
    )
    # 校验请求是否成功,状态码非200直接抛出异常
    api_request.raise_for_status()
    # 解析JSON
    api = api_request.json()
    # 校验返回数组非空再取值
    if api and len(api) > 0:
        city = api[0]["Reporting Area"]
        print(f"获取到的城市为:{city}")
    else:
        print("API返回空数组,无有效数据")
except requests.exceptions.RequestException as e:
    print(f"请求出错:{e}")
    # 可打印返回内容排查问题
    if 'api_request' in locals():
        print(f"服务端返回内容:{api_request.text[:200]}") # 只打印前200字符避免输出过长
except KeyError as e:
    print(f"JSON字段不存在:{e}")
except IndexError as e:
    print(f"数组下标越界:{e}")

额外排查建议

如果修改后仍有问题,可先打印api_request.text查看返回内容:如果返回的是验证码页面、拦截提示,可尝试添加Cookie、Referer等其他请求头,完全模拟浏览器的请求参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:21:04