我正在解析json数据。我的解析没有问题,我正在使用simplejson模块。但是某些api请求返回空值。这是我的示例:
simplejson
{ "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'
编辑 :由于simplejson.decoder.JSONDecodeError实际上是从ValueError(这里的证明)继承的,所以我只使用简化了catch语句ValueError。
simplejson.decoder.JSONDecodeError
ValueError