2013-10-30 6 views
0

此地理编码代码在本地工作,但不在服务器中,它以self.request.get('address')的形式获取地址,并从get_lat_long(address)函数返回值ndb.GeoPt()列表索引错误超出范围在GAE

所以,我怎么就出现错误:

Traceback (most recent call last): 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "/base/data/home/apps/s~map-jobs/2.371278632227250958/main.py", line 453, in post 
    profile.geopoint = get_lat_long(self.request.get('address')) 
    File "/base/data/home/apps/s~map-jobs/2.371278632227250958/main.py", line 17, in get_lat_long 
    lat = data['results'][0]['geometry']['location']['lat'] 
IndexError: list index out of range 

有了这个代码:

def get_lat_long(address): 
    address = cgi.escape(address.replace(" ","+")) 
    sensor = "true" 
    url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&sensor="+ sensor 
    result = urlfetch.fetch(url) 
    data = json.loads(result.content) 
    lat = data['results'][0]['geometry']['location']['lat'] 
    long = data['results'][0]['geometry']['location']['lng'] 
    return ndb.GeoPt(str(lat) +","+ str(long)) 

什么是谷歌与应用引擎服务器写这个的正确方法是什么?

+0

尝试打印'data ['results']'看看它是否真的存在 – aIKid

+0

错误非常明显:'data ['result']'为空。 –

+0

@PaoloMoretti是的,你刚刚编辑它,你没有说过什么是错误的,我说的是同样的事情。 – aIKid

回答

1

您可以使用len()来检查索引的存在。

1

data['results'][0]实际上是空的。

发生这种情况时没有结果。通常情况下,我只是把它放在一个try/catch块,除一个IndexError

​​

在你的情况,把try/catch块周围下面的代码,并找到一种方式来处理错误:

lat = data['results'][0]['geometry']['location']['lat'] 
    long = data['results'][0]['geometry']['location']['lng'] 

这发生在我身上很多,当我使用谷歌驱动器,因为很多doucments没有text/html作为输出格式,我总是得到KeyError。在你的情况下,你正在处理谷歌地图,如果有结果那里应该geometry和字典中的其他键,但是,你也可以选择添加KeyError到你的except子句是额外的谨慎。

相关问题