2017-10-16 1 views
0

J'ai besoin de retourner un tas d'UGS d'une réponse de l'API JSON, mais parfois il est « vide »:Comment simplement attraper une liste vide dans Python à partir de l'API JSON?

{'products': [], 'request_speed': 0.0015690326690674} 

Ce code fonctionne quand il y a des produits, mais soulève un IndexError quand il n'y a pas de produits:

data = json.loads(r.text) 
print(data) 
if not data['products'][0]: 
    print("something") 
    for key in data['products']: 
     print(key['info']['sku']) 
else: 
    print("nothing") 

Et ce toujours a « quelque chose » parce qu'il ya toujours un « produits » [] dans la réponse:

data = json.loads(r.text) 
print(data) 
if not data['products']: 
    print("something") 
    for key in data['products']: 
     print(key['info']['sku']) 
else: 
    print("nothing") 

Je sais que je pourrais ajouter un essai/à l'exception du premier exemple, mais il semble que ce soit un moyen de parvenir à quelque chose.

Existe-t-il un moyen plus court d'y parvenir? Je l'ai pensé:

if 'info' in data['products']: 

Était le chemin pythonique mais cela renvoie toujours "rien".

+1

Votre chèque est faux. 'if not data ['products']:' devrait être 'si data ['products']:'. Vous pouvez également vérifier: 'if any (data ['products']):' –

+0

Oui, la deuxième tentative devrait fonctionner si vous corrigez la condition. – mkrieger1

Répondre

0

vérifier son len, comme ceci:

data = json.loads(r.text) 

print(data) 

if len(data['products']) > 0: 
    print("something") 
    for key in data['products']: 
     print(key['info']['sku']) 

else: 
    print("nothing") 
0
if 'info' in r.text: 

fonctionne également. Quelle option est la meilleure pratique et je vais marquer comme correct?

1

Vous n'avez pas à faire cette vérification du tout.

Vous pouvez simplement parcourir la liste vide. Il ne fera rien s'il n'y a rien .:

data = json.loads(r.text) 
for key in data['products']: 
    print(key['info']['sku']) 

EDIT

Si vous voulez arrêter votre itération:

if not data['products']: 
    break 
for key in data['products']: 
    print(key['info']['sku']) 
+0

Sauf que ce code est dans une boucle while pour parcourir les pages 1, 2, etc., j'ai donc besoin de vérifier s'il s'agit du dernier enregistrement car l'API ne renvoie aucun produit. –

+0

Le si pas de données ['produits']: sera toujours vrai car il y a toujours des produits, c'est juste une liste vide quand il n'y en a pas. –

+0

Essayez d'exécuter ceci sur votre interpréteur: 'sinon []: imprimer ('cette liste est vide')' –