在无休止地运行这段代码后,它会随机崩溃并抛出这两个错误:
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)
原因是有时,您从脚本无法解析的服务器获取结果。
当您的 JSON 结果解码为字符串list
时,会发生TypeError
;例如,["Invalid input"]
.显然,"Invalid input"['low']
没有意义,因为您无法使用字符串键为字符串编制索引。
另一方面,当您获得表示list
的 JSON 对象时,会发生KeyError
dicts
,*其中至少有一个不包含 'low'
键。
要解决此问题,您可以将解析逻辑包装在一个 try-except
块中,该块查找所需的数据,如果找不到,则返回类似 None
的内容。您还可以检查get
调用的结果代码。