python 2/3 兼容性问题异常

python 2/3 compatibility issue with exception

我编写了以下与 python3

一起使用的代码
try:
    json.loads(text)
except json.decoder.JSONDecodeError:
    (exception handling)

但是,如果我使用 python2,当 json.loads 抛出异常时,我得到:

File "mycode.py", line xxx, in function
    except json.decoder.JSONDecodeError:
AttributeError: 'module' object has no attribute 'JSONDecodeError'

实际上,https://docs.python.org/2/library/json.html doesn't mention any JSONDecodeError exception, while https://docs.python.org/3/library/json.html 确实如此。

如何让代码 运行 同时具有 python 2 和 3?

在 Python 2 json.loads 提高 ValueError:

Python 2.7.9 (default, Sep 17 2016, 20:26:04)
>>> json.loads('#$')                                                
Traceback (most recent call last):                                  
  File "<stdin>", line 1, in <module>                               
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads    
    return _default_decoder.decode(s)                               
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode    
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())               
  File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")             
ValueError: No JSON object could be decoded

您可以尝试使用json.decoder.JSONDecodeError。如果它失败了,你就会知道你需要赶上 ValueError:

try:
    json_parse_exception = json.decoder.JSONDecodeError
except AttributeError:  # Python 2
    json_parse_exception = ValueError

然后

try:
    json.loads(text)
except json_parse_exception:
    (exception handling)

在任何一种情况下都有效。