2012-06-13 164 views
2
try: 
    html = urlopen('http://glbse.com/api/asset/' + asset.name) 
except: 
    print 'error while updating the price of ' + asset.name 
    continue 
json_txt = html.read() 
ticker = json.loads(json_txt) 
average_price = int(ticker['t24havg']) 
if average_price == 0: 
    average_price = int(ticker['t5davg']) 
if average_price == 0: 
    average_price = int(ticker['t7davg']) 
if average_price == 0: 
    average_price = int(ticker['latest_trade']) 
if average_price == 0: 
    print 'could not determine the price of ' + asset.name 
    continue 
asset.average_price = average_price 

我使用機械化的的urlopen。 此代碼(以及程序的其餘部分)似乎可以在幾小時內正常運行,但在循環遍歷此部分數千次之後,最終會在代碼的某個部分掛起。爲什麼這段python代碼在執行期間會掛起?

它掛爲不確定的時間長度。我甚至回過頭來發現它已經掛在那裏好幾個小時了。

谷歌搜索的問題都是我拿出有類似的問題,在執行上.read(),它被固定年前報道掛起的報告。

那麼是什麼原因造成的執行掛起,我該如何解決或解決方法呢?

+0

我見過'json.loads'掛起時未提供有效的json文件。你確定你總是傳遞一個正確的json文件嗎? – Darthfett

+7

除了'except:';它會捕獲任何異常。只捕捉你需要捕捉的東西。添加一些記錄;這應該可以幫助你發現問題所在。 – MRAB

+2

你可以嘗試將可選的超時參數傳遞給urllib2.urlopen,看看是否有幫助。 –

回答

1

使用mechanize.Browser().open()而不是urlopen揭示了一個「urllib2.URLError urlopen connection time out」,當單獨使用urlopen時不會引發。我強烈懷疑這是問題,我的解決方案是在所有情況下使用mechanize.Browser().open()代替urlopen