超时时跳过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
的时候,继续读取下一个网址。该怎么做呢?
谢谢!
3 个回答
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
可能不是导致这个问题的唯一原因。
正如在这里提到的(而且根据问题描述来看也是如此),这个异常可能和 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"
1
我先假设你说的“崩溃”是指“引发一个URLError”,就像在urllib2.urlopen
的文档中描述的那样。你可以查看Python教程中的“错误和异常”部分。
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