【问题标题】:Python3: unable to import JSONDecodeError from json.decoderPython3:无法从 json.decoder 导入 JSONDecodeError
【发布时间】:2017-11-26 14:20:42
【问题描述】:

我使用 python 3.4.3 设置 virtualenv 并尝试从 json.decoder 导入 JSONDecodeError

from json.decoder import JSONDecodeError (I think its valid in python3 ? But why not working for me ?) 

但它不起作用。只有以下工作:

from simplejson import JSONDecodeError

我是怎么做到的?

virtualenv venv --no-site-packages -p python3 
pip install ipython
ipython
from json.decoder import JSONDecodeError
ImportError: cannot import name 'JSONDecodeError'

【问题讨论】:

  • 您的文件是否命名为json.py?请提供完整的追溯。
  • 从 json 导入 JSONDecodeError
  • 奇怪,这对我来说很好用。如果你尝试from json import decoder; print(decoder.JSONDecodeError),你能看到会发生什么吗?
  • 在 [8] 中:打印(decoder.JSONDecodeError)------------------------------- -------------------------------------------- AttributeError Traceback(最近调用最后) in () ----> 1 print(decoder.JSONDecodeError) AttributeError: 'module' object has no attribute 'JSONDecodeError'
  • 附上截图

标签: python python-3.x simplejson


【解决方案1】:

根据3.4.x docs,当JSON解码失败时,会引发普通ValueError。

JSONDecodeError 类从3.5.x 开始可用。

【讨论】:

  • 确实如此。由于JSONDecodeError 继承自ValueError,如果您关心可移植性,最好抓住后者。
【解决方案2】:

根据module json (Python version >= 3.5.0)的文档,Python =3.5.0),你的 import 语句肯定是正确的。

【讨论】:

    【解决方案3】:

    json 是已经集成到 Python 中的 simplejson 版本。此后,它们已单独开发,不再相同。所以它们不一定可以互换使用。

    有关差异的更多详细信息,请参阅this answer。

    【讨论】:

    • 你能澄清一下'from json import JSONDecodeError'在python3中是对还是错吗?
    • 如其他答案中所述,它取决于次要版本。如果您的疑问不是“为什么这适用于 simplejson 而不适用于 json?”然后我误会了。
    猜你喜欢
    • 2023-03-27
    • 2020-07-17
    • 2021-05-31
    • 2015-08-17
    • 2018-11-06
    • 2017-01-21
    • 1970-01-01
    • 2018-09-19
    • 2022-01-03
    相关资源
    最近更新 更多