2017-08-06 2 views
0

J'ai une question intéressante: comment demander à Python de continuer à répéter la dernière action jusqu'à ce que je vois un résultat différent?Python: refaire la dernière requête JSON jusqu'à ce que quelque chose change

Schenario: J'essaie de récupérer JSON de Google API. Mon code est comme:

  • si ['status'] == 'ZERO_RESULTS' je passe à la prochaine latitude, longitude inspectent
  • si ['status'] == 'OK' je récupère les données de cette latitude, longitude
  • si ['status'] == 'OVER_QUERY_LIMIT' attendre 24 heures et puis essayez à nouveau que Latitude, Longitude

Par exemple:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import time 

for val in "catcatcatcatcat": 
    if val == "c": 
     print(val) 
    time.sleep(1) 
    if val == "a": 
     print(val) 
    time.sleep(1) 
    elif val == "t": 
     # retray this last action till "t" has become "c" or "a" 
    time.sleep(86400) 

L'API Google arrête mon script après avoir asséché ma limite de demande et que mon script doit faire une pause pendant 24h. C'est pourquoi "t" dans le et deviendra un "c" ou un "a" mais je ne veux pas recommencer à analyser JSON depuis le début comme je vérifie tout Latitude, Longitude par pays.

Je veux:

Parse JSON 
Pause 24h 
reparse that last JSON 

Répondre

0
while True: 
    data = get_data() 
    status = data['status'] 
    if status != 'OVER_QUERY_LIMIT': 
     break 
    sleep(...) 
if status == 'ZERO_RESULTS': 
    ... 
elif status == 'OK': 
    ... 
0

La bonne réponse était:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import time 

for val in "catcatcatcatcat": 
    if val == "c": 
     print(val) 
    time.sleep(1) 
    if val == "a": 
     print(val) 
    time.sleep(1) 
    elif val == "t": 
     while val == "t": 
      print('We will retry this') 
    time.sleep(86400)