Python深层嵌套字典列表结构层级访问索引报错排查
报错原因
你的报错核心是对返回结构的层级类型判断错误:
- 接口返回值最外层是字典,其中
result键对应的值是列表,不是字典,因此无法直接用'entry_price'这类字符串key做索引,这就是第一次写法触发TypeError: list indices must be integers or slices, not str的原因。 - 你后续尝试的写法存在两个错误:
- Python列表索引从0开始计数,本次返回的
result列表仅包含2个元素(分别对应多仓、空仓),有效索引只有0和1,写[2]会触发索引越界 result列表内的每个元素本身是字典,不是嵌套列表,因此在整数索引后再加[0]/[2]这类数字索引,相当于给字典传不存在的数字key,自然无法取到目标值。
- Python列表索引从0开始计数,本次返回的
正确访问方案
先明确返回结构的层级逻辑:
- 最外层字典 → 通过
'result'键取到持仓列表 - 持仓列表 → 用整数索引取单个持仓字典:索引
0对应side为Buy的多仓,索引1对应side为Sell的空仓 - 单个持仓字典 → 用字段名作为key即可取到对应数值
基础索引写法
直接按固定索引取值即可:
resp = session.my_position(symbol="BTCUSDT") # 取多仓入场价 long_entry_price = resp['result'][0]['entry_price'] # 取空仓入场价 short_entry_price = resp['result'][1]['entry_price']
更稳妥的遍历写法
如果担心后续接口返回的持仓顺序变动,可以通过遍历+字段匹配的方式取值,兼容性更强:
resp = session.my_position(symbol="BTCUSDT") long_entry_price = None short_entry_price = None for position in resp['result']: if position['side'] == 'Buy': long_entry_price = position['entry_price'] elif position['side'] == 'Sell': short_entry_price = position['entry_price']
嵌套结构排查技巧
后续遇到同类嵌套结构取值问题时,可以通过打印类型和长度的方式快速理清层级,避免猜结构:
resp = session.my_position(symbol="BTCUSDT") # 打印result的类型,确认是列表还是字典 print(type(resp['result'])) # 打印列表长度,确认有效索引范围 print(len(resp['result'])) # 打印列表首个元素的类型,确认下一层级的索引方式 print(type(resp['result'][0]))
内容的提问来源于stack exchange,提问作者Doug
相关产品推荐
相关产品推荐

