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)
在任何一种情况下都有效。
我编写了以下与 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)
在任何一种情况下都有效。