我還是比較新的Python,所以如果這是一個明顯的問題,我很抱歉。在Python的urllib2中檢測超時錯誤urlopen
我的問題是關於urllib2庫,它是urlopen函數。目前我正在使用它從另一臺服務器加載大量頁面(它們都在同一個遠程主機上),但是腳本每隔不久就會被一個超時錯誤(我認爲這是來自大量請求)終止。
有沒有辦法在超時後繼續運行腳本?我希望能夠獲取所有的頁面,所以我想要一個腳本,它會一直試圖獲取頁面,然後繼續前進。
請注意,會保持連接打開服務器的幫助嗎?
我還是比較新的Python,所以如果這是一個明顯的問題,我很抱歉。在Python的urllib2中檢測超時錯誤urlopen
我的問題是關於urllib2庫,它是urlopen函數。目前我正在使用它從另一臺服務器加載大量頁面(它們都在同一個遠程主機上),但是腳本每隔不久就會被一個超時錯誤(我認爲這是來自大量請求)終止。
有沒有辦法在超時後繼續運行腳本?我希望能夠獲取所有的頁面,所以我想要一個腳本,它會一直試圖獲取頁面,然後繼續前進。
請注意,會保持連接打開服務器的幫助嗎?
下次發生錯誤時,請記下錯誤消息。最後一行會告訴你異常的類型。例如,它可能是urllib2.HTTPError
。一旦您知道引發的異常類型,您可以在try...except
區塊中找到它。例如:
import urllib2
import time
for url in urls:
while True:
try:
sock=urllib2.urlopen(url)
except (urllib2.HTTPError, urllib2.URLError) as err:
# You may want to count how many times you reach here and
# do something smarter if you fail too many times.
# If a site is down, pestering it every 10 seconds may not
# be very fruitful or polite.
time.sleep(10)
else:
# Success
contents=sock.read()
# process contents
break # break out of the while loop
所以,如果我理解正確的話,這將使其「嘗試」,直到它不返回一個錯誤? – Parker 2010-08-18 18:05:20
@Parker:當Python到達'try'塊中的代碼時,如果發生'urllib2.HTTPError'或'urllib2.URLError',Python將轉到'except'塊。如果沒有發生異常,那麼Python將轉到'else'塊。 – unutbu 2010-08-18 18:09:32