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

使用Folium实现IP追踪地图时遇ValueError:location参数为空数组

解决IP追踪地图标记程序的ValueError问题

错误原因

报错ValueError: Expected two (lat, lon) values for location, instead got: []的核心原因是geocoder.ip(ip)返回的latlng为空列表——说明geocoder库没能成功获取目标IP的经纬度数据。常见诱因包括:

  • 输入的IP地址无效、属于内网IP,或无法被公开地理数据库解析
  • geocoder依赖的免费API存在调用次数限制或访问限制
  • 网络环境导致无法连接到地理编码服务

修正方案

方案1:为原代码添加空值检查与方法修复

原代码中locationmap1.show_in_browser()是错误用法(folium的Map对象无此方法),同时需要加入空值判断避免触发异常:

import geocoder
import folium
import webbrowser

ip = input('Enter IP to trace: ')
g = geocoder.ip(ip)
location = g.latlng

# 检查是否获取到有效经纬度
if not location:
    print(f"无法解析IP {ip}的地理位置,请检查IP有效性或稍后重试")
else:
    locationmap1 = folium.Map(location=location, zoom_start=12)
    folium.CircleMarker(location=location, radius=50, popup=f"目标IP: {ip}").add_to(locationmap1)
    locationmap1.save('locationmap1.html')
    # 用webbrowser模块打开生成的地图文件
    webbrowser.open('locationmap1.html')

方案2:更换更稳定的地理编码服务(ipinfo.io)

如果geocoder库持续无法获取数据,可以改用ipinfo的公开API(无需密钥,有调用次数限制):

import requests
import folium
import webbrowser

ip = input('Enter IP to trace: ')
# 调用ipinfo API获取地理数据
response = requests.get(f"https://ipinfo.io/{ip}/json")
if response.status_code == 200:
    data = response.json()
    loc_str = data.get('loc')
    if loc_str:
        # 将经纬度字符串转为浮点数元组
        location = tuple(map(float, loc_str.split(',')))
        # 生成地图并标记点位
        locationmap1 = folium.Map(location=location, zoom_start=12)
        popup_content = f"IP: {ip}\n地区: {data.get('city', '')}, {data.get('region', '')}"
        folium.CircleMarker(location=location, radius=50, popup=popup_content).add_to(locationmap1)
        locationmap1.save('locationmap1.html')
        webbrowser.open('locationmap1.html')
    else:
        print(f"无法获取IP {ip}的地理位置信息")
else:
    print(f"请求地理数据失败,状态码: {response.status_code}")

内容的提问来源于stack exchange,提问作者Cole Edwards

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:12:12