python KeyError:0

时间:2016-04-02 00:45:11

标签: python twython keyerror

来自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]}

然后我为printtype(data)添加了type(data['coordinates'])次调用,并在错误发生时将dict作为结果。

我现在也意识到这只发生在data['place']!=None时(并且每次都发生)。 所以我现在正在data['place']type(data['place'])repr(data['place'])

进行打印调用

我还可以在这里设置什么来捕获错误/弄清楚发生了什么?

如果有帮助here是包含TwythonStreamer类定义的200行python文件。

1 个答案:

答案 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']