带有 for 循环的 API 调用不会遍历 Python 中的列表



我正在尝试向coinmarketcap调用API以获取加密投资组合的价格,并将价格附加到列表中。

作品集在excel文件上。我正在用pandas阅读excel,然后循环遍历"项目"。列,并将名称附加到名为"project_list"的列表中。

然后我进行API调用,循环遍历之前创建的"project_list",并试图获得每个项目的价格,最后将这些价格附加到一个名为"price_list"的空列表。

但是当我运行代码时,它给出和IndexError, IndexError: list index out of range.

但奇怪的是,如果我手动填充项目列表,代码工作得很好。

我认为这可能是因为我动态地添加到列表中,并且在API调用时它还没有准备好。但是我试着在添加列表后马上做其他事情,它们都工作得很好。

代码如下,任何帮助将非常感激!

步骤1:读取Excel文件

crypto_df = pd.read_excel('D:TradingCRYPTOCrypto Portfolio Tracker.xlsx')

步骤2:创建project_list并从dataframe中添加名称

project_list = []
for name in crypto_df['Project'].values:
project_list.append(name)

步骤3:调用API

class CMC:
def __init__(self, token):
self.apiurl = 'https://pro-api.coinmarketcap.com'
self.headers = {'Accepts': 'application/json', 'X-CMC_PRO_API_KEY': token, }
self.session = Session()  # instead of requesting url through requests, we are requesting through sessions.
self.session.headers.update(self.headers)
def get_all_coins(self):
url = self.apiurl + '/v1/cryptocurrency/map'
r = self.session.get(url)
data = r.json()['data']
return data
def get_price(self, symbol):
url = self.apiurl + '/v2/cryptocurrency/quotes/latest'
parameters = {'symbol': symbol}
r = self.session.get(url, params=parameters)
data = r.json()['data']
return data

步骤4:将价格追加到price_list

price_list = []
cmc = CMC(secrets_.API_KEY)
for crypto in project_list:
price = cmc.get_price(crypto)
price_list.append(price[crypto][0]['quote']['USD']['price'])
print(price_list)

这就给出了索引错误。

如果我手动填充project_list,例如project_list = ['ETH', 'BTC', 'ADA', 'LINK'等。它工作得很好。我做错了什么?

感谢大家的回复。我想明白了。我的代码没有问题。Coinmarketcap对基本计划(免费)API的请求/分钟有限制。如果列表太大,就会抛出错误。当我把我的清单缩减到只有几种货币时,它起作用了。我仍然不能确定我可以确切地添加多少到列表中,我猜它随他们收到的请求量而变化。

最新更新