2010-08-18 66 views
3

我還是比較新的Python,所以如果這是一個明顯的問題,我很抱歉。在Python的urllib2中檢測超時錯誤urlopen

我的問題是關於urllib2庫,它是urlopen函數。目前我正在使用它從另一臺服務器加載大量頁面(它們都在同一個遠程主機上),但是腳本每隔不久就會被一個超時錯誤(我認爲這是來自大量請求)終止。

有沒有辦法在超時後繼續運行腳本?我希望能夠獲取所有的頁面,所以我想要一個腳本,它會一直試圖獲取頁面,然後繼續前進。

請注意,會保持連接打開服務器的幫助嗎?

回答

2

下次發生錯誤時,請記下錯誤消息。最後一行會告訴你異常的類型。例如,它可能是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 
+0

所以,如果我理解正確的話,這將使其「嘗試」,直到它不返回一個錯誤? – Parker 2010-08-18 18:05:20

+0

@Parker:當Python到達'try'塊中的代碼時,如果發生'urllib2.HTTPError'或'urllib2.URLError',Python將轉到'except'塊。如果沒有發生異常,那麼Python將轉到'else'塊。 – unutbu 2010-08-18 18:09:32

相關問題