[英]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.