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

执行python manage.py cities_light报ValueError: invalid literal for int() with base 10: ''错误

问题根因

该报错核心是ValueError: invalid literal for int() with base 10: '',从调用栈可以定位到:导入国家数据时,程序尝试将countryInfo.txt文件里的geonameid字段值转为整数用于数据库查询,但该字段某行的值是空字符串,无法完成转换导致程序崩溃。

排查步骤
  • 找到django-cities-light的本地缓存目录:默认是系统临时目录下的cities_light文件夹,也可以通过项目配置项CITIES_LIGHT_DATA_DIR自定义路径,打开该目录下的countryInfo.txt文件,检查是否存在geonameid列为空的行
  • 确认当前安装的django-cities-light版本,排查是否为旧版本存在空值兼容缺陷
解决方法
  • 方法1:强制刷新缓存重新拉取数据
    运行导入命令时添加--force-all参数,跳过本地缓存直接拉取最新的官方地理数据:
python manage.py cities_light --force-all
  • 方法2:升级依赖包到最新稳定版
    旧版本的django-cities-light对异常数据的容错处理不完善,直接升级包即可:
pip install --upgrade django-cities-light
  • 方法3:手动修复异常数据
    如果重新拉取数据后仍存在问题,打开本地缓存的countryInfo.txt,找到geonameid为空的行,直接删除该行或者补充合法的非重复数字id,保存后重新运行导入命令。

  • 方法4:临时添加空值跳过逻辑(仅作为临时应急方案)
    找到报错的文件cities_light/management/commands/cities_light.py,在country_import方法中查询Country对象的代码前,添加空值判断逻辑:

# 加在 country = Country.objects.get(geoname_id=items[ICountry.geonameid]) 之前
if not items[ICountry.geonameid]:
    self.logger.warning(f"跳过geonameid为空的异常数据行:{items}")
    return

修改保存后重新运行导入命令即可自动跳过异常行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:21:02