异常处理是python中对错误的另外一种处理方式
至于为何在爬虫代码中加入异常处理,异常处理是什么,在这里给你们两个网站,有兴趣的话能够仔细研究
1. http://python.jobbole.com/81341/ 伯乐在线,URL异常处理
2. http://www.runoob.com/python/python-exceptions.html 菜鸟教程,python异常处理
这两个网站已经讲得很详细了,你要是所有看完而且看懂了的话,那么下面我要讲的对你来讲就是小儿科,可是,若是你跟本没看或者看了以后发现太难了看不下去,这也不要紧,由于咱们如今还用不到这么多
咱们要知道的只有3个问题:
1. 什么是异常处理
2. 为何要加入异常处理
3. 怎么使用异常处理
1. 什么是异常处理
异常是指程序中的例外,违例状况,简单的说就是程序运行中出现的错误
异常处理是程序出现错误以后的处理方法
2. 为何要加入异常处理
程序的运行过程当中哪一个地方都有可能出现错误,因此咱们须要对程序运行中出现的错误进行处理,这个处理可能有不少种方式,包括输出错误信息或者执行什么操做等等
3. 怎么使用异常处理
在程序运行的过程当中,若是发生了错误,能够事先约定返 回一个错误代码,这样,就能够知道是否有错,以及出错的缘由
python中使用try/except语句来进行异常处理
try用来检测语句中的错误,从而让except语句捕获异常信息并处理
当咱们认为某些代码可能会出错时,就能够用try来运行这段代码,若是执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块
下面来看一个简单的例子:
html
try: print 'try...' r = 10 / 0 print 'result:', r # ZeroDivisionError 是错误的类型,在程序运行以前咱们应该预测程序可能会出现什么错误 # e是遇到错误时输出的信息,e,将这个信息返回 except ZeroDivisionError, e: print 'except:', e
输出结果是:
python
上面的程序中由于被除数是0,因此返回的错误信息是integer division or modulo by zero,而这个信息是存在e这个变量中
在浏览网页的过程当中,可能会遇到网址不存在或者链接超时等各类状况,而咱们运行爬虫程序时也同样,在爬虫中,咱们遇到的错误类型主要有两类
1. URLError,可能产生的缘由:
1. 网络无链接,即本机没法上网
2. 链接不到特定的服务器
3. 服务器不存在
2. HTTPError
HTTPError是URLError的子类,在你利用urlopen方法发出一个请求时,服务器上都会对应一个应答对象response,其中它包含一个数字"状态码"
这样说你们可能不明白,那再换一个说法,当咱们打不开网页时,会出现404,502等等的提示,这个404,502就是状态码,我会在下一篇将网上找到的HTTPError错误码列举出来,一样,不想看的话也能够不看
咱们刚刚说道错误有两个,可是咱们一般用URLError,由于URLError是父类,HTTPError是URLError的子类
说了这么久,最终的目的是要在咱们的代码中加入异常处理,来看看代码:
服务器
#!/uer/bin/env python # -*- coding: UTF-8 -*- __author__ = '217小月月坑' ''' 加入异常处理 ''' import urllib2 url = 'http://www.qiushibaike.com/' user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0' headers = {'User-Agent':user_agent} try: request = urllib2.Request(url,headers=headers) response = urllib2.urlopen(request) print response.read().decode("gbk") except urllib2.URLError,e: if hasattr(e,"code"): print e.code if hasattr(e,"reason"): print e.reason