Python中字典get()方法遇‘list index out of range’的解决方法
解决JSON数据取值的索引越界问题
错误原因分析
- 默认值类型不匹配:你给
list设置的默认值是{}(字典),但实际接口返回的list是数组类型。就算把默认值改成数组,如果数组为空,直接用[0]索引也会触发「list index out of range」错误。 - 字段名错误:你要获取的是
bidPrice,但代码里写的是lastPrice,就算索引没问题,也取不到正确值。
安全取值方案
核心思路是:先判断数组是否非空,再去取第一个元素,全程用get()避免KeyError,同时保证默认值类型匹配。
方案一:分步判断(可读性优先)
# 假设接口返回数据存在变量json_data中 result = json_data.get('result', {}) item_list = result.get('list', []) # 先判断列表是否有内容,再取值 bid_price = item_list[0].get('bidPrice') if item_list else None
方案二:链式调用(简洁优先)
bid_price = json_data.get('result', {}).get('list', [])[0].get('bidPrice') if json_data.get('result', {}).get('list', []) else None
方案三:使用Walrus运算符(Python 3.8+,逻辑紧凑)
# 用海象运算符存中间变量,避免重复调用get if item_list := json_data.get('result', {}).get('list', []): bid_price = item_list[0].get('bidPrice') else: bid_price = None
方案四:封装成工具函数(复用优先)
如果需要多次获取这类字段,可以封装成函数:
def extract_bid_price(json_data): result = json_data.get('result', {}) item_list = result.get('list', []) return item_list[0].get('bidPrice') if item_list else None # 使用示例 bid_price = extract_bid_price(json_data)
关键注意事项
- 始终保证默认值类型匹配:数组类型的字段默认值设为
[],字典类型设为{},避免类型不匹配引发后续错误。 - 严格核对字段名:比如接口返回的是
bidPrice,就不要写成lastPrice,否则get()会返回None。
内容的提问来源于stack exchange,提问作者Nazar Kravchenko
相关产品推荐
相关产品推荐

