Python 错误时转到列表中的下一项
我正在从一个列表中提取网站,并想测试它们是向上还是向下。下面的代码只要启动就可以正常工作,但一旦其中一个URL出现问题,我就会收到一条错误消息,整个脚本就会停止 我想要实现的是:错误消息==网站不工作,所以打印下来并移动到列表中的下一项Python 错误时转到列表中的下一项,python,python-2.7,Python,Python 2.7,我正在从一个列表中提取网站,并想测试它们是向上还是向下。下面的代码只要启动就可以正常工作,但一旦其中一个URL出现问题,我就会收到一条错误消息,整个脚本就会停止 我想要实现的是:错误消息==网站不工作,所以打印下来并移动到列表中的下一项 import urllib2 from urllib2 import Request, urlopen, HTTPError, URLError def checkurl(z): user_agent = 'Mozilla/20.0.1 (co
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)
导入urllib2
来自urllib2导入请求、urlopen、HTTPError、URLError
def checkurl(z):
用户_代理='Mozilla/20.0.1(兼容;MSIE 5.5;Windows NT)'
headers={'User-Agent':User\u-Agent}
link=“http://”+z
req=请求(链接,标题=标题)
尝试:
页面_open=urlopen(请求)
除HTTPError外,e:
打印“向下”
其他:
打印
#打印urlib2.urlopen('http://'+z).read()
回溯(最近一次呼叫最后一次):
文件“/home/user/Videos/python/onion/qweq.py”,第48行,在
检查URL(x)
文件“/home/user/Videos/python/onion/qweq.py”,第23行,在checkurl中
页面_open=urlopen(请求)
文件“/usr/lib/python2.7/urllib2.py”,urlopen中的第127行
return\u opener.open(url、数据、超时)
文件“/usr/lib/python2.7/urllib2.py”,第401行,打开
响应=自身打开(请求,数据)
文件“/usr/lib/python2.7/urllib2.py”,第419行,打开
"开放",
文件“/usr/lib/python2.7/urllib2.py”,第379行,在调用链中
结果=func(*args)
文件“/usr/lib/python2.7/urllib2.py”,第1211行,在http\u open中
返回self.do_open(httplib.HTTPConnection,req)
文件“/usr/lib/python2.7/urllib2.py”,第1178行,打开
h、 请求(请求获取方法(),请求获取选择器(),请求数据,标题)
文件“/usr/lib/python2.7/httplib.py”,第962行,在请求中
self.\u发送请求(方法、url、正文、标题)
文件“/usr/lib/python2.7/httplib.py”,第996行,在发送请求中
self.endheaders(主体)
文件“/usr/lib/python2.7/httplib.py”,第958行,在endheaders中
自发送输出(消息体)
文件“/usr/lib/python2.7/httplib.py”,第818行,在发送输出中
self.send(msg)
文件“/usr/lib/python2.7/httplib.py”,第780行,在send中
self.connect()
文件“/usr/lib/python2.7/httplib.py”,第761行,在connect中
self.timeout,self.source\u地址)
文件“/home/user/Videos/python/onion/qweq.py”,第5行,在create_connection中
sock.connect(地址)
文件“/usr/lib/python2.7/dist packages/socks.py”,第369行,在connect中
self.\uu negotiatesocks5(目的地对[0],目的地对[1])
文件“/usr/lib/python2.7/dist packages/socks.py”,第236行,in_uunegotiatesocks5
raise SOCKS5错误(ord(响应[1]),_一般错误[ord(响应[1]))
TypeError:\uuuu init\uuuuu()正好接受2个参数(给定3个)
您正在捕获HTTPError
,但抛出的是Socks5Error
以回答“是否可以假设网站在不考虑错误的情况下已关闭”,然后这样做:
req = Request(link, headers = headers)
try:
page_open = urlopen(req)
except:
print "down"
else:
print 'up'
您的
except
子句中缺少Socks5Error
。看看回溯:
raise Socks5Error(ord(resp[1]),_generalerrors[ord(resp[1])])
请注意,如果使用而不是
urllib2
,则不会发生这种情况。界面更清晰,文档更好。发布错误回溯会很有帮助……您确定URL正确吗(即z
的内容)?您正在使用的z
值之一似乎无效(导致网络模块出现故障)。您好@isedev。我是一个有点呆头呆脑的人,但是有没有可能假设不管出现什么错误,网站都已关闭,然后转到列表中的下一项?刚刚尝试了这个,它似乎起了作用!非常感谢!另外,我真的希望将来有一天能达到和你们一样的水平……为什么要投反对票?它可能并不优雅,但它是评论中实际问题的唯一答案。