Python3调用API访问JSON数组遇IndexError:列表索引越界求助
解决Python调用API时访问空数组的IndexError问题
嘿,我来帮你捋清楚这个问题的来龙去脉哈!
错误原因拆解
你碰到的IndexError: list index out of range,核心原因其实很简单:某个API请求返回了空数组[],这时候你硬要去取jdata[0],自然会报错——空数组里根本没有第0个元素嘛。
看你的代码逻辑,是循环用LIST里的参数调用接口,大概率是其中某一个参数对应的接口返回了空值,而不是所有请求都有问题。你后来发现API恢复正常后代码就能跑,也正好验证了这一点。
代码优化建议
虽然API恢复后能正常运行,但为了以后不再踩这个坑(比如API临时抽风、参数对应的数据本身就不存在),建议给代码加个判断逻辑,先确认数组非空再去访问元素:
import requests import json LIST = ['1','2'] data = {} for i in LIST: api = 'http://foo.bar.com/values/%s/nodes' % (i) r = requests.get(api) r.raise_for_status() jdata = r.json() # 先判断数组是否有内容,再取值 if jdata: node = jdata[0]['name'] # 这里可以根据需求把node存入data或者做其他处理 data[i] = node print(f"参数{i}对应的节点名称:{node}") else: print(f"警告:参数{i}的API返回空数组,无法获取节点名称")
这样修改后,就算再遇到API返回空数组的情况,代码也不会直接崩溃,还能给出清晰的提示,方便你快速定位问题。
调试小技巧
平时调试这类API调用问题时,可以在jdata = r.json()之后加一行打印代码:
print(f"参数{i}的API返回结果:{jdata}")
这样能直观看到每个请求的返回内容,一下子就能找出是哪个参数对应的请求出了问题,比单纯看报错高效多啦!
内容的提问来源于stack exchange,提问作者onfire
相关产品推荐
相关产品推荐

