【发布时间】:2011-03-27 17:45:33
【问题描述】:
我正在编写一个小 Python 代码来解析来自 google maps API 的响应,但是我收到“IndexError: list index out of range”错误,这对我来说确实有意义。对于某些请求,该代码可以正常工作,而对于其他一些请求,则不行。
代码的目的是对随机地址的地址响应进行结构化,并放入dict结构中以备后用。
我检查了列表的范围(例如计数到 n-1),但这似乎不是问题。
Exact traceback:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "geoCodeAPI.py", line 67, in getLocation
data[i] = {'formatted_address': formattedAddress[i], 'street': streetname[i], 'street_number': streetnumber[i], 'city': city[i], 'country': country[i], 'lat': lat[i], 'lng': lng[i]}
IndexError: list index out of range
非常感谢对代码的任何建议和一般 cmets。谢谢。
#!/usr/bin/python
import urllib
import json
jsonResponse = ''
def getLocation(rawAddressString):
addressString = rawAddressString.replace(" ", "+");
url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + addressString+ "&sensor=false";
googleResponse = urllib.urlopen(url);
result = json.load(googleResponse)
formattedAddress = []
lat = []
lng = []
country = []
streetnumber = []
streetname = []
city = []
for s in result['results']:
formattedAddress.append(s['formatted_address'])
lat.append(s['geometry']['location']['lat'])
lng.append(s['geometry']['location']['lng'])
for foo in s['address_components']:
if foo['types'][0] == "country":
country.append(foo['long_name'])
else:
country.append("NA")
if foo['types'][0] == "street_number":
streetnumber.append(foo['long_name'])
else:
streetnumber.append("NA")
if foo['types'][0] == "route":
streetname.append(foo['long_name'])
else:
streetname.append("NA")
if "locality" in foo['types'][0]:
city.append(foo['long_name'])
else:
city.append("NA")
data = dict()
print range(len(country))
print range(len(city))
for i in (range(len(country))):
data[i] = {'formatted_address': formattedAddress[i], 'street': streetname[i], 'street_number': streetnumber[i], 'city': city[i], 'country': country[i], 'lat': lat[i], 'lng': lng[i]}
return data
【问题讨论】:
-
请始终提供包含回溯的完整错误消息。
-
"""得到一个 "IndexError: list index out of range" 错误,"""。老兄,请完整的回溯...
-
抱歉获取回溯:回溯(最近一次调用最后一次):文件“
”,第 1 行,在 文件“geoCodeAPI.py”,第 67 行,在 getLocation 数据中[i] = {'formatted_address': formattedAddress[i], 'street': streetname[i], 'street_number': streetnumber[i], 'city': city[i], 'country': country[i], 'lat': lat[i], 'lng': lng[i]} IndexError: list index out of range -
编辑您的问题,添加回溯并修复缩进。
-
旁注:
data可以是字典列表。