首页 > 解决方案 > json.load 不允许加载 nan 和 inf 值

问题描述

如此处的文档中所示,
有人可以举例说明如何准确地使用parse_constantwithjson.load
避免加载inf, -inf,nan值,这会引发一些Value error异常,这样在执行时很容易完成json.dumps(allow_nan=False)

非常感激

标签: pythonpython-3.x

解决方案


如果从文档中不清楚:

parse_constant,如果指定,将使用以下字符串之一调用:'-Infinity'、'Infinity'、'NaN'。如果遇到无效的 JSON 数字,这可用于引发异常。

这意味着它是一个以这 3 个字符串之一作为参数调用的函数,并且应该返回适​​当的值(或抛出我假设的错误)

def test(arg):
    print("got:",arg)
    c = {"-Infinity":-float("inf"), "Infinity":float("inf"), "NaN":float("nan")}
    return c[arg]

json.loads('[Infinity, -Infinity, NaN]', parse_constant=test)

因此,为了确保它永远不会加载那些我认为你的功能只是raise ValueError("not allowed Infinity or NaN")或类似的东西。


推荐阅读