You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

关键修改说明:

  1. 变量名修正:把location_req_url改成location_data,避免你误以为这是一个URL字符串,实际它是get_ip()返回的解析后的JSON字典。
  2. 移除错误的列表索引:接口返回的结构是{'location': {'lat': 20..., 'lng': ...}},location是字典,所以直接用['location']['lat']就能拿到纬度值,不需要用[0](那是列表的用法)。
  3. 数据结构匹配:确保你访问的键和接口返回的完全一致,比如接口里的lat和lng都是字符串键,直接对应访问即可。

这样修改后,你的代码就能正确从返回的JSON中提取纬度和经度,并存入lat和lon变量里了。

内容的提问来源于stack exchange,提问作者Joshua Shibu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:14:52