如何在lat变量中存储位置数据?解决KeyError列表索引类型错误
解决KeyError并正确存储位置数据
嘿,我来帮你搞定这个问题!先拆解下你遇到的错误根源:
- 你把
get_ip()返回的JSON字典存到了一个叫location_req_url的变量里,这个变量名很容易让你混淆它的实际类型(它不是URL字符串,是解析后的字典)。 - 接口返回的
location是一个嵌套字典,不是列表,但你用了列表索引[0]去访问,这就导致了KeyError: list indices must be integer not str——因为字典只能用字符串键来取值,不能用整数索引。
接下来是修正后的代码,我标注了关键修改点:
def get_location(self): # 获取位置信息,修正变量名为location_data,更贴合实际用途 location_data = self.get_ip() print(location_data) # 可以打印确认数据结构 # 接口返回的location是字典,直接通过键访问,不需要列表索引[0] lat = location_data['location']['lat'] lon = location_data['location']['lng'] print(lat) print(lon) return {'lat': lat, 'lon': lon} def get_ip(self): ip_url = "https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyCpx2tKaiqlI6p7xgpCXK" req = requests.post(ip_url) ip_json = json.loads(req.text) print(ip_json) return ip_json
关键修改说明:
- 变量名修正:把
location_req_url改成location_data,避免你误以为这是一个URL字符串,实际它是get_ip()返回的解析后的JSON字典。 - 移除错误的列表索引:接口返回的结构是
{'location': {'lat': 20..., 'lng': ...}},location是字典,所以直接用['location']['lat']就能拿到纬度值,不需要用[0](那是列表的用法)。 - 数据结构匹配:确保你访问的键和接口返回的完全一致,比如接口里的
lat和lng都是字符串键,直接对应访问即可。
这样修改后,你的代码就能正确从返回的JSON中提取纬度和经度,并存入lat和lon变量里了。
内容的提问来源于stack exchange,提问作者Joshua Shibu
相关产品推荐
相关产品推荐

