2016-10-06 4 views
0

私のURLは(URLの特定のパラメータたびに変化があるように)毎回変え続けます。以下のよう最初の呼び出しが止まった場合、Pythonのurllib2.urlopenで繰り返し要求を送信する方法は?私はしばらくの間(真)ループ内で</p> <p>をurllib2.urlopen使用してPythonでURLへの呼び出しを作っています

私のコードを見て:

def get_url(url): 
    '''Get json page data using a specified API url''' 
    response = urlopen(url) 
    data = str(response.read().decode('utf-8')) 
    page = json.loads(data) 
    return page 

私はURL私が電話をかけるたびに変更することにより、メイン関数から上記のメソッドを呼び出しています。

私は何を観察すると、機能にいくつかの呼び出しの後、突然(Iドン; tは、なぜ知っている)ということである

...、コードは声明

response = urlopen(url) 

で立ち往生し、それだけで待って待機し

この状況をどのように処理するのが最適ですか?

たとえば、10秒以内に応答しない場合は、再度同じ電話をかけます。

これが失敗した場合、私は約

response = urlopen(url, timeout=10) 

を読むが、その後どのような繰り返しの呼び出しについてはどうですか?あなたは、ループ内のtry/catchを使用し、試みたいどのように多くの再試行回数に応じて、

答えて

1

while True: 
    try: 
     response = urlopen(url, timeout=10) 
     break 
    except: 
     # do something with the error 
     pass 
# do something with response 
data = str(response.read().decode('utf-8')) 
... 

これは理想的ではないかもしれないすべての例外、(ここではその上より:Handling urllib2's timeout? - Python)沈黙ます

0

この方法では、一度再試行できます。

def get_url(url, trial=1): 
    try:  
     '''Get json page data using a specified API url''' 
     response = urlopen(url, timeout=10) 
     data = str(response.read().decode('utf-8')) 
     page = json.loads(data) 
     return page 
    except: 
     if trial == 1: 
      return get_url(url, trial=2) 
     else: 
      return 
+0

@ abhishek-shivkumarこのコードを試してみましたか? –

関連する問題