Je suis en train d'analyser les données JSON. Je n'ai pas de problème avec l'analyse et j'utilise le module simplejson
. Mais certaines requêtes api retournent une valeur vide. Voici mon exemple:
{
"all" : {
"count" : 0,
"questions" : [ ]
}
}
C'est le segment de mon code où j'analyse l'objet json:
qByUser = byUsrUrlObj.read()
qUserData = json.loads(qByUser).decode('utf-8')
questionSubjs = qUserData["all"]["questions"]
Comme je l'ai mentionné pour certaines demandes, j'obtiens l'erreur suivante:
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)
Quel serait le meilleur moyen de gérer cette erreur?
Il existe une règle dans Python appelée "il est plus facile de demander pardon que pour une autorisation" (en bref: EAFP). Cela signifie que vous devez intercepter des exceptions au lieu de vérifier la validité des valeurs.
Ainsi, essayez ce qui suit:
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'
[~ # ~] éditer [~ # ~] : Depuis simplejson.decoder.JSONDecodeError
_ hérite en fait de ValueError
( preuve ici ), j’ai simplifié l’instruction catch en utilisant simplement ValueError
.