如何解决在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)可以更好地处理错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。