来自Twython的我的程序流数据会生成此错误:
longitude=data['coordinates'][0]
KeyError: 0
这在以下代码中发生:
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
if data['place']!=None:
if 'coordinates' in data and data['coordinates'] is not None:
longitude=data['coordinates'][0]
然后我在经度陈述之前插入了一个print(data['coordinates'])
行,并且这个错误间歇性地发生了最后一次打印出{'coordinates': [-73.971836, 40.798598], 'type': 'Point'}
。虽然有时它会反转键条目的顺序,如下所示:
{'type': 'Point', 'coordinates': [-73.97189946, 40.79853829]}
然后我为print
和type(data)
添加了type(data['coordinates'])
次调用,并在错误发生时将dict
作为结果。
我现在也意识到这只发生在data['place']!=None
时(并且每次都发生)。
所以我现在正在data['place']
,type(data['place'])
和repr(data['place'])
我还可以在这里设置什么来捕获错误/弄清楚发生了什么?
如果有帮助here是包含TwythonStreamer类定义的200行python文件。
答案 0 :(得分:1)
既然您已经为您的问题添加了更实际的代码,那么问题就在于何处。 Twython流式传输器并不总是发送坐标数据,它可以是None
- 但当 发送它时,lat / long值可以嵌套两层深
所以数据结构是这样的:
{
'coordinates': {
'coordinates': [-73.971836, 40.798598],
'type': 'Point'
},
...
}
这意味着您的代码需要如下所示:
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
if 'place' in data and data['place'] is not None:
if 'coordinates' in data and data['coordinates'] is not None:
longitude, latitude = data['coordinates']['coordinates']
或更简单:
class MyStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
place = data.get('place')
if place is not None:
coords = data.get('coordinates')
if coords is not None:
longitude, latitude = coords['coordinates']