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

Python调用API后如何从JSON响应提取F1赛事特定字段?遇KeyError: 'time'

报错原因

KeyError: 'time'的核心问题是,你要找的*time字段*根本不在你当前访问的字典层级上。
你调用response.json()拿到的data是整个JSON响应的最外层根字典,对照你贴的响应结构看,这个根字典下只有MRData一个一级键,根本不存在直接叫time的顶层键,所以直接写data["time"]必然触发键不存在的报错。

正确的取数路径

你拿到的是典型的多层嵌套JSON结构,从根节点到你要的time字段需要逐层向下访问,完整路径为:

  • 第一步:从根字典进入API返回的核心数据层,取data["MRData"]
  • 第二步:从核心数据层进入赛事表格容器,取data["MRData"]["RaceTable"]
  • 第三步:从容器的赛事列表里取出单场赛事对象,取data["MRData"]["RaceTable"]["Races"][0]
    • 这里要注意,Races是列表类型,你当前请求只返回了1场赛事,所以取列表索引为0的元素就行;如果后续查询返回多场赛事,直接遍历这个列表就能拿到所有场次的数据
  • 第四步:在单场赛事的字典对象中,才存在time这个键,直接访问就能拿到赛事开始时间
修正后的可运行代码
import requests

response = requests.get("http://ergast.com/api/f1/2020/6.json")
data = response.json()

# 逐层访问获取目标的赛事时间字段
race_start_time = data["MRData"]["RaceTable"]["Races"][0]["time"]
print(race_start_time)

运行这段代码会正常输出13:10:00Z,不会再抛出KeyError。

常用拓展字段取法参考

后续你要提取其他赛事信息时,直接对照嵌套层级访问即可,几个常用字段的路径如下:

  • 赛事正式名称:data["MRData"]["RaceTable"]["Races"][0]["raceName"]
  • 赛事举办自然日期:data["MRData"]["RaceTable"]["Races"][0]["date"]
  • 赛道正式名称:data["MRData"]["RaceTable"]["Races"][0]["Circuit"]["circuitName"]
  • 赛道所在国家:data["MRData"]["RaceTable"]["Races"][0]["Circuit"]["Location"]["country"]
  • 赛道所在具体属地:data["MRData"]["RaceTable"]["Races"][0]["Circuit"]["Location"]["locality"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 03:45:09