在for循环中旋转以创建dict时出现keyrerror

2024-04-20 06:40:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从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'

Tags: 数据inclientidforget属性stats
1条回答
网友
1楼 · 发布于 2024-04-20 06:40:49

对于初学者,您应该使用调试器(如果您的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', 0)),

等等。。还请注意,您可以使用字典的“get”方法,使用默认值(本例中为0)以更好地处理错误

相关问题 更多 >