2017-04-11 12 views
2

APIのURLからjsonデータをフェッチするコードを実行していますが、シナリオはURL応答がフェッチされない間にカスタム例外を試みていますレスポンスはまだ200を示しますが、データをフェッチしません)この場合、コードは最初から再実行されます。api呼び出しが失敗した場合に実行を再実行する - [Python2.7]

コード:インターネット

を検索すると、誰もがこの上で役立つことができますが

import json 
import urllib 
url = 'www.google.com' 
status = url.getcode() 
if(status != 200): 
    # re-execute the code 
data = json.load(urllib.urlopen(url)) 
if (data == null): 
    #re-execute the code 

が同じに適した解決策を見つけることができませんでしたか?

+0

何を?さらに、 'null'がPythonに存在しない場合、' data is None'または 'data not if 'を使ってそれを検証することができます。 – lmiguelvargasf

+0

「ヌル」とは何ですか? – lmiguelvargasf

答えて

2

私は、これはあなたがこれまで持っているロジック以下、あなたを助けることができると思う:

import json 
import urllib 

url = 'www.google.com' 

while True: 
    status = url.getcode() 
    if status != 200: 
     continue 
    data = json.load(urllib.urlopen(url)) 
    if not data: 
     continue 
    break 

あなたはまた、それをすることによって少し向上させることができます:ループを使用する方法について

import json 
import urllib 

url = 'www.google.com' 
status = url.getcode() 
data = json.load(urllib.urlopen(url)) 

while status != 200 or not data: 
    status = url.getcode() 
    data = json.load(urllib.urlopen(url)) 
0
import json 
import urllib 

URL = 'www.google.com' 

def get_data_status(url): 
    return (json.load(urllib.urlopen(url)), url.getcode()) 

while 1: 
    data, status = get_data_status(URL) 
    if data and (status==200): 
     break 

なし、偽、空の文字列、空の辞書、空の配列、および0は偽の値です。私は正しくnullを使用していたとは思わない。 PythonがJSONをデコードするとき、Pythonはnullをnullオブジェクトにします。これはNoneです。

ETA:に関するコメント:

APIは、任意のデータを持っていない場合は、ヌルとして応答を返すしたがってヌル

を与えiがあれば(データは==」の後に実行するために、いくつかのより線を有しますヌル)OK」

あなたが本当に戻ってJSONリクエストからSTR(null)を取得していると、あなたはそのイベント時に 『コードの数より多くの行を実行』したいので、もし:

while 1: 
    data, status = get_data_status(URL) 
    if (data!='null') and (status==200): 
     break 
    elif (data='null'): 
     print 'execute a few more lines of "null" data code' 
    elif (status!=200): 
     print 'execute a few more lines of wrong status code' 

print 'exiting while loop with good data and status 200' 
+0

これは2つのエラーエラーを生成します:1. 'status'と' data'は定義されていません。 2. 'null'はPythonには存在しません – lmiguelvargasf

+0

はい私は最初の2つをキャッチし、あなたがコメントしたとおりに編集していました。オペレーションがヌルレスポンスによって何を意味するのか分かりませんか? – litepresence

+0

私はあなたに同意します。おそらく 'null'は変数ですが、通常はファイルの先頭にあるインポートを見たので、Javaを使った経験があると思います。 – lmiguelvargasf

関連する問題