[英]JSON library exception in Python 3
由于 Python 2 API 似乎一团糟 - 从文件系统函数我有时会得到 unicode 字符串,有时会得到标准字符串 - 我现在正在尝试从 Python 2 过渡到 Python 3。但是在这样做时我遇到了关于json
模块的问题.
我使用 Python 3.4 运行标准的 Ubuntu 系统。 当我尝试使用 JSON 模块时,我收到以下错误消息:
Traceback (most recent call last):
File "./sysmon.py", line 227, in <module>
jsonCfgObj = json.load(json_file, 'utf-8', strict = False)
File "/usr/lib/python3.4/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.4/json/__init__.py", line 331, in loads
return cls(**kw).decode(s)
TypeError: 'str' object is not callable
乍一看,这似乎是 Python 3 的 JSON 模块中的一个错误。我简直不敢相信,因为我没有做任何与众不同的事情:我只是阅读了一个非常非常简单的 JSON 配置文件。
您对如何处理此错误有任何想法吗?
Python 2 中json.load
的第二个参数是encoding
,但是在 Python 3 中第二个参数是cls
并且它必须是None
(默认)或JSONDecoder
子类。 json.load
的签名是现在
json.load(fp, cls=None, ...)
您需要从参数列表中删除'utf-8'
(改为将其传递给文件打开器)。
OTOH json.loads
仍然有encoding
参数,但它“被忽略和弃用”。
Python 3中的json.load()
不接受二进制文件,因此删除了第二个参数encoding
。
'utf-8'
在这里被解释为cls
参数,它与导致您看到的TypeError
的编码无关。 从json.load()
调用中删除'utf-8'
——您应该将编码传递给打开文件的代码:
import json
with open('text.json', encoding='utf-8') as file:
data = json.load(file)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.