当urlopen不能够处理一个response时,产生urlerror。
不过通常的python apis异常如valueerror,typeerror等也会同时产生。
httperror是urlerror的子类,通常在特定http urls中产生。
1.urlerror
通常,urlerror在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。
立即学习“Python免费学习笔记(深入)”;
[python] view plaincopy
- import urllib2
- req = urllib2.Request('http://www.baibai.com')
- try: urllib2.urlopen(req)
- except urllib2.URLError, e:
- print e.reason
服务器上每一个HTTP 应答对象response包含一个数字"状态码"。
301:请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源 处理方式:重定向到分配的URL
302:请求到的资源在一个不同的URL处临时保存 处理方式:重定向到临时的URL
因为默认的处理器处理了重定向(300以外号码),并且100-299范围的号码指示成功,所以你只能看到400-599的错误号码。
BaseHTTPServer.BaseHTTPRequestHandler.response是一个很有用的应答号码字典,显示了HTTP协议使用的所有的应答号。
立即学习“Python免费学习笔记(深入)”;
[python] view plaincopy
- import urllib2
- req = urllib2.Request('http://bbs.csdn.net/callmewhy')
- try:
- urllib2.urlopen(req)
- except urllib2.URLError, e:
- print e.code
- #print e.read()
3.Wrapping
立即学习“Python免费学习笔记(深入)”; [python] view
plaincopy
- from urllib2 import Request, urlopen, URLError, HTTPError
- req = Request('http://bbs.csdn.net/callmewhy')
- try:
- response = urlopen(req)
- except HTTPError, e:
- print 'The server couldn\'t fulfill the request.'
- print 'Error code: ', e.code
- except URLError, e:
- print 'We failed to reach a server.'
- print 'Reason: ', e.reason
- else:
- print 'No exception was raised.'
- # everything is fine
因为HTTPError是URLError的子类,如果URLError在前面它会捕捉到所有的URLError(包括HTTPError )。
立即学习“Python免费学习笔记(深入)”;
立即学习“Python免费学习笔记(深入)”;
[python] view plaincopy
- from urllib2 import Request, urlopen, URLError, HTTPError
- req = Request('http://bbs.csdn.net/callmewhy')
- try:
- response = urlopen(req)
- except URLError, e:
- if hasattr(e, 'code'):
- print 'The server couldn\'t fulfill the request.'
- print 'Error code: ', e.code
- elif hasattr(e, 'reason'):
- print 'We failed to reach a server.'
- print 'Reason: ', e.reason
- else:
- print 'No exception was raised.'
- # everything is fine
以上就介绍了[Python]网络爬虫(三):异常的处理和HTTP状态码的分类,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。











