2011-11-09 47 views
2

我有網址的跳過URL,如果超時

我使用以下檢索其內容的列表:

for url in url_list: 
    req = urllib2.Request(url) 
    resp = urllib2.urlopen(req, timeout=5) 
    resp_page = resp.read() 
    print resp_page 

當出現超時,該方案只是崩潰。如果有socket.timeout: timed out,我只想閱讀下一個網址。這個怎麼做?

感謝

+0

對於類似的問題,請參閱:http://stackoverflow.com/questions/2712524/handling-urllib2s-timeout-python – Raz

回答

1

我要繼續前進,並假設通過「崩潰」你的意思是「提出了一個URLError」,由urllib2.urlopen docs描述。請參閱Python教程的Errors and Exceptions部分。

for url in url_list: 
    req = urllib2.Request(url) 
    try: 
     resp = urllib2.urlopen(req, timeout=5) 
    except urllib2.URLError: 
     print "Bad URL or timeout" 
     continue # skips to the next iteration of the loop 
    resp_page = resp.read() 
    print resp_page 
1

聽起來像你只是需要捕捉超時異常。我沒有收到你所做的socket.timeout消息。

req = urllib2.Request("http://127.0.0.2") 
try: 
    resp = urllib2.urlopen(req, timeout=5) 
except urllib2.URLError: 
    print "Timeout!" 

顯然,您需要有一個實際上會超時的URL(127.0.0.2可能不在您的盒子上)。

7

雖然已經有了答案,但我想指出URLlib2可能不是唯一對此行爲負責的人。

如指出here(並且因爲它也似乎基於問題描述),異常可能屬於socket庫。

在這種情況下,只需添加另一個except

import socket 

try: 
    resp = urllib2.urlopen(req, timeout=5) 
except urllib2.URLError: 
    print "Bad URL or timeout" 
except socket.timeout: 
    print "socket timeout" 
+2

Downvoting沒有解釋不真的很有用,是嗎? – Jir