0

在无限的 while True 循环中运行这段代码后,它随机崩溃并抛出以下两个错误:

TypeError: string indices must be integers

Keyerror: l (this is the letter "L", FWIW)

这里的问题是它有效,然后就崩溃了。有时它会在 while True 循环的第一次迭代后崩溃,有时它可以运行长达 20 分钟才崩溃。

这是一段代码。它正在从 Bitmex 提取 OHLC 价格数据。它的作用是获取最后 30、1 分钟的蜡烛,然后从所有 30 根蜡烛中找到最低的“最低”价格。如果您通过导入 bitmex、json 和请求来尝试它,那么每次手动尝试都应该没有问题。当它在循环上运行时,它会随机崩溃。有任何想法吗?

def lowest_price():
    response = requests.get("https://www.bitmex.com/api/v1/trade/bucketed?binSize=1m&partial=false&symbol=XBTUSD&count=30&reverse=true").json()
    minimum = min([l['low'] for l in response])
    return(minimum)
4

1 回答 1

0

原因是有时,您会从服务器获得脚本无法解析的结果。

TypeError当您的 JSON 结果被解码为一个list字符串时,就会发生这种情况;说,["Invalid input"]。显然"Invalid input"['low']没有意义,因为你不能用字符串键索引字符串。

另一方面,KeyError当您获得一个表示 a listof的 JSON 对象时会发生这种情况dicts,*其中至少一个不包含'low'密钥。

为了解决这个问题,您可以将解析逻辑包装在一个try-except块中,该块查找所需的数据并返回类似None如果找不到它的内容。您还可以检查get调用的结果代码。

于 2019-04-25T04:59:34.023 回答