python教程—处理JSON解码错误时,没有返回-Python实用宝典

python教程—处理JSON解码错误时,没有返回

我正在解析json数据。我没有解析问题,我使用的是simplejson模块。但是一些api请求返回空值。下面是我的例子:

我正在解析json数据。我没有解析问题,我使用的是simplejson模块。但是一些api请求返回空值。下面是我的例子:

    { "all" : { "count" : 0, "questions" : [ ] } }

这是我解析json对象的代码段:

    qByUser = byUsrUrlObj.read() qUserData = json.loads(qByUser).decode('utf-8') questionSubjs = qUserData["all"]["questions"]

正如我提到的一些请求,我得到以下错误:

    Traceback (most recent call last): File "YahooQueryData.py", line 164, in <module> qUserData = json.loads(qByUser) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/simplejson/__init__.py", line 385, in loads return _default_decoder.decode(s) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/simplejson/decoder.py", line 402, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/simplejson/decoder.py", line 420, in raw_decode raise JSONDecodeError("No JSON object could be decoded", s, idx) simplejson.decoder.JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)

处理这个错误的最佳方法是什么?

回答

Python编程中有一条规则叫做“请求原谅比请求许可更容易”(简而言之:EAFP)。这意味着您应该捕获异常,而不是检查值的有效性。

因此,尝试以下方法:

    try: qByUser = byUsrUrlObj.read() qUserData = json.loads(qByUser).decode('utf-8') questionSubjs = qUserData["all"]["questions"] except ValueError: # includes simplejson.decoder.JSONDecodeError print 'Decoding JSON has failed'

EDIT:由于simplejson.decoder.JSONDecodeError实际上继承自ValueError (proof here),所以我只使用ValueError来简化catch语句。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论