在for循环中旋转以创建字典时出现KeyError

问题描述

我正在从Coinbase Pro的产品行情清单中导入贸易数据。我设置了for循环,以将特定信息导入到特定属性中。 for循环随机迭代(看似是随机次数)并吐出关键错误。我敢肯定,数据集在其来源字典中包含该属性。我知道这是因为它以随机顺序吐出数据,因此它调用的特定属性已成功调用过几次。 (此外,我将其暂停的那些值分别调用以再次检查它们是否不为空),我还将for循环范围减小到大小的三分之一。它似乎仍然具有KeyError(尽管偶尔它确实解析并打印了所有数据。 更新我没有在文件中设置数据集,因为我是从coinbase pro调用它的,但是如果您希望我可以添加一个数据文件的文本文件呢?

import cbpro,public_client = cbpro.PublicClient()
aprods=public_client.get_products()
prods=[temp['id'] for temp in aprods]

for i in range(0,len(prods)):
    print(i,prods[i])
    tprods={
            'id': prods[i],'price': float(public_client.get_product_ticker(product_id=prods[i]) ['price']),'h24': float(public_client.get_product_24hr_stats(prods[i]) ['high']),'l24': float(public_client.get_product_24hr_stats(prods[i]) ['low']),'range':(float(public_client.get_product_24hr_stats(prods[i]) ['high'])-float(public_client.get_product_24hr_stats(prods[i]) ['low'])),'%range':100*(float(public_client.get_product_24hr_stats(prods[i]) ['high'])-float(public_client.get_product_24hr_stats(prods[i]) ['low']))/float(public_client.get_product_ticker(product_id=prods[i])['price'])
            }

以下是追溯

Traceback (most recent call last):
  File "C:\Users\Slide 2.0\Desktop\cryptopj\apt.py",line 24,in <module>
    'h24': float(public_client.get_product_24hr_stats(prods[i]) ['high']),KeyError: 'high'

解决方法

对于初学者,您应该使用调试器(如果您的IDE拥有这种调试器),或者准备某种机制以在导致错误的行上提供更多详细信息。

对于后者,最简单的方法是在访问字典键之前先打印行

print(public_client.get_product_24hr_stats(prods[i]))

此外,您似乎每次都在查询一些API以获取新数据,因此您不必每次都在同一个构造上工作。您可能要分配一个变量,以后再访问它的键。您提出的解决方案可能会达到某种速率限制,并返回其中包含错误消息而不是实际数据的一些奇怪的字典。

prods_data= public_client.get_product_24hr_stats(prods[i])
tprods={
            'id': prods[i],'price': float(public_client.get_product_ticker(product_id=prods[i]) ['price']),'h24': float(prods_data.get('high',0)),'l24': float(prods_data.get('low',

等。另外请注意,您可以使用字典的“ get”方法,该方法的默认值(在这种情况下为0)可以更好地处理错误。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...