You need to enable JavaScript to run this app. 调用geocoder.freegeoip获取IP地理位置时报JSONDecodeError如何解决
优惠活动
大模型
产品
解决方案
定价
更多

调用geocoder.freegeoip获取IP地理位置时报JSONDecodeError如何解决

报错原因说明
  • 触发的JSONDecodeError: Expecting value: line 1 column 1 (char 0)本质很简单:程序试图把根本不是JSON格式的内容(大概率是空响应、4xx错误的HTML页面)硬解析成JSON结构,这时候就会抛出该异常。
  • 出现该问题的直接诱因是调用geocoder.freegeoip()的时候传了空字符串当入参:库会把这个空值当成你要查询的目标IP,拼接到请求地址里,最后发出去的请求完全不符合接口规范,服务端自然不会返回正常的JSON定位数据,解析环节就直接报错。
  • 这里的逻辑误区是:你本来想靠空值让程序自动获取用户IP,结果传空串根本不会触发自动获取的逻辑,反而因为非法请求拿到了无效响应。
对应解决方法
  • 调整调用逻辑:要自动获取当前网络出口的公网IP定位,根本不需要给geocoder.freegeoip()传任何参数,直接无参调用就行,定位接口会自动识别请求来源的IP,返回对应位置数据。
  • 取值不需要手动解析整个JSON结构,返回的geocoder对象自带现成的属性可以直接读取:
    • 读g.ip就能拿到解析好的用户公网IP,直接给后续流程使用
    • 读g.latlng就能拿到格式为[纬度, 经度]的坐标值
  • 如果无参调用后还是出现同样的JSON解析错误,说明请求定位接口的时候碰到了网络不通、接口限流拦截的问题,拿到的是带错误信息的非JSON内容;可以先打印返回对象的status属性确认请求状态,排查网络连通性之后重试即可。
正确调用示例
import geocoder

# 无参调用,自动识别当前出口IP的定位信息
g = geocoder.freegeoip()

# 直接取需要的字段就行,不用自己解析json
user_public_ip = g.ip
user_lat, user_lon = g.latlng

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:24:03