如何解决Django调用API遇空列表报list index out of range错误
问题处理方案
你遇到的报错本质是空列表无下标为0的元素,最简单的处理方式是在取值时加非空判断,空列表时直接返回None即可,完全适配你模型中leverage_buy字段null=True的配置。
代码修改(views.py)
只需要调整leverage_buy的赋值逻辑即可,修改后代码如下:
from django.shortcuts import render from meal_app.models import Kraken import requests def get_krakens(request): all_krakens = {} url ='https://api.kraken.com/0/public/AssetPairs' response = requests.get(url) data = response.json() for i in data['result'].values(): kraken_data = Kraken( altname = i['altname'], # 新增非空判断,空列表时赋值None leverage_buy = i['leverage_buy'][0] if i['leverage_buy'] else None, ) kraken_data.save()
可选更简洁写法
也可以用Python内置的next()方法实现相同效果,代码更短:
leverage_buy = next(iter(i['leverage_buy']), None)
逻辑说明
- 当
leverage_buy返回非空列表时,正常取首元素赋值 - 当
leverage_buy返回空列表[]时,直接赋值None存入数据库,不会触发IndexError报错
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

