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

Miniconda中json.dumps报错,与Homebrew Python行为差异原因问询

关于Anaconda与Homebrew Python中json.dumps行为差异的解答

首先直接给结论:这种差异大概率不是Anaconda发行版本身修改了标准库json的行为,更可能是你的Miniconda环境里存在第三方json库(比如simplejson)覆盖了标准库,或者两个环境的Python版本/依赖库版本不一致导致的。

下面具体拆解原因和排查方向:

1. 最常见的原因:误用了simplejson而非标准库json

Python标准库的json模块(从Python 3.x开始)会自动将字典的整数键转换为字符串,比如运行json.dumps({1: "test"})会输出{"1": "test"},不会报错。但如果你在Miniconda环境里安装了simplejson,并且代码里写了import simplejson as json,那情况就不一样了:

  • 旧版本的simplejson默认不支持非字符串类型的键,调用simplejson.dumps({1: "test"})就会抛出TypeError: keys must be a string的错误;
  • 而Homebrew的Python环境里可能没有安装simplejson,所以默认使用的是标准库的json,自然不会报错。

快速排查方法

在Miniconda环境里运行以下代码:

import json
print(json.__file__)

如果输出路径里包含simplejson字样,说明你确实误用了第三方库。

2. Python版本差异

如果你的Miniconda环境用的是Python 2.x(虽然Flask现在更推荐3.x,但不排除旧环境),那标准库的json模块确实会对非字符串键报错——Python 2.x的json模块严格遵循早期的JSON规范,不允许非字符串键;而Python 3.x的标准库json已经做了兼容,会自动转换整数键为字符串。

3. Anaconda环境的依赖特殊情况

虽然Anaconda的Python大多基于官方CPython发行版,但某些定制化的Anaconda环境可能会替换标准库的json实现(比如为了性能使用第三方编译版本),但这种情况非常罕见。

解决建议

  • 修正导入语句:确保代码里用的是标准库的json,即import json,而非import simplejson as json;
  • 升级依赖:如果确实需要使用simplejson,在Miniconda环境里运行conda install -c conda-forge simplejson升级到最新版本,新版本的simplejson已经支持自动转换非字符串键;
  • 手动转换键:如果上述方法都无法实施,可以提前将字典的整数键转换为字符串:
    converted_dict = {str(key): value for key, value in aDict.items()}
    json_str = json.dumps(converted_dict)
    
  • 统一环境版本:检查两个环境的Python版本,尽量保持一致,避免版本差异带来的行为不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:57:31