出错时转到列表中的下一项

时间:2014-03-01 22:48:04

标签: python python-2.7

我从列表中提取网站并想测试它们是上升还是下降。下面的代码只要它们正常运行就可以正常运行,但只要其中一个url出现问题,我就会收到一条错误消息并且整个脚本都会停止。

我想要实现的目标:错误消息==网站无法正常工作因此打印并移至列表中的下一个项目。

import urllib2
    from urllib2 import Request, urlopen, HTTPError, URLError

def checkurl(z):
    user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)'
    headers = { 'User-Agent':user_agent }
    link = "http://"+z
    req = Request(link, headers = headers)
    try:
        page_open = urlopen(req)
    except HTTPError, e:
        print "down"
    else:
        print 'up'
    #print urllib2.urlopen('http://'+z).read()


Traceback (most recent call last):
  File "/home/user/Videos/python/onion/qweqweqweq.py", line 48, in <module>
    checkurl(x)
  File "/home/user/Videos/python/onion/qweqweqweq.py", line 23, in checkurl
    page_open = urlopen(req)
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 401, in open
    response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 419, in _open
    '_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 379, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 1211, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.7/urllib2.py", line 1178, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.7/httplib.py", line 962, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 996, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 958, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 818, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 780, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 761, in connect
    self.timeout, self.source_address)
  File "/home/user/Videos/python/onion/qweqweqweq.py", line 5, in create_connection
    sock.connect(address)
  File "/usr/lib/python2.7/dist-packages/socks.py", line 369, in connect
    self.__negotiatesocks5(destpair[0],destpair[1])
  File "/usr/lib/python2.7/dist-packages/socks.py", line 236, in __negotiatesocks5
    raise Socks5Error(ord(resp[1]),_generalerrors[ord(resp[1])])
TypeError: __init__() takes exactly 2 arguments (3 given)

3 个答案:

答案 0 :(得分:2)

您正在捕捉HTTPError,但引发的是Socks5Error

答案 1 :(得分:2)

您在Socks5Error条款中遗漏了except。看看追溯:

raise Socks5Error(ord(resp[1]),_generalerrors[ord(resp[1])])

请注意,如果您使用requests而不是urllib2,则不会发生这种情况。界面更清晰,文档更好。

答案 2 :(得分:1)

在回答“是否有可能假设网站无论错误是否已关闭”,那么这样做:

req = Request(link, headers = headers)
try:
    page_open = urlopen(req)
except:
    print "down"
else:
    print 'up'