簡體   English   中英

Python 3 中的 JSON 庫異常

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM