Python的json模块默认可以输出NaN或Infinity,但这些并不是标准JSON数值。文件在本机能生成,不代表其他语言或严格接口一定能接受。

导出前明确特殊值策略
使用allow_nan=False时,遇到非有限浮点数会抛出ValueError。这样可以在数据离开程序之前发现问题,而不是等对方解析失败。若业务允许缺失值,应先明确转换为null的规则;不能偷偷把异常值改成零。
输入与输出分别控制
allow_nan控制序列化行为,不会自动约束读取过程。读取非标准NaN等常量可结合parse_constant制定拒绝策略。普通数字在转换后也可能超出业务范围,因此语法合法仍不等于数据满足要求。
用有限值与异常值对照
下面检查正常小数能够导出,NaN和正负无穷都会被拒绝。这个检查只覆盖非有限浮点数,不处理业务字段完整性或重复键;这些属于另外的校验层。示例在隔离环境运行,不读取真实数据文件。
可以运行的练习
import json
assert json.loads(json.dumps({"value": 1.25}, allow_nan=False)) == {"value": 1.25}
for value in [float("nan"), float("inf"), float("-inf")]:
try:
json.dumps({"value": value}, allow_nan=False)
except ValueError:
pass
else:
raise AssertionError("非有限数值没有被拒绝")
print("有限值通过,三种非有限值被拒绝")
示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。
资料与继续学习
Python:JSON的NaN与Infinity处理。资料查阅日期:2026年10月5日。步骤与练习由本站整理。
资料查阅与编辑日期:2026年10月5日。作者:玖柒。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END






