云豆贴心提醒,本文阅读时间6分钟 先来说一说HTTP的异常处理问题。
这种情况下,异常同样会带有"reason"属性,它是一个tuple(可以理解为不可变的数组), 包含了一个错误号和一个错误信息。 我们建一个urllib2_test06.py来感受一下异常的处理: 按下F5,可以看到打印出来的内容是: [Errno 11001] getaddrinfo failed 也就是说,错误号是11001,内容是getaddrinfo failed 2.HTTPError 有时状态码指出服务器无法完成请求。默认的处理器会为你处理一部分这种应答。 例如:假如response是一个"重定向",需要客户端从别的地址获取文档,urllib2将为你处理。 其他不能处理的,urlopen会产生一个HTTPError。 典型的错误包含"404"(页面无法找到),"403"(请求禁止),和"401"(带验证请求)。 HTTP状态码表示HTTP协议所返回的响应的状态。 比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的状态码为200,表示响应成功。 如果请求的资源不存在, 则通常返回404错误。 HTTP状态码通常分为5种类型,分别以1~5五个数字开头,由3位整数组成: 200:请求成功 处理方式:获得响应的内容,进行处理 201:请求完成,结果是创建了新资源。新创建资源的URI可在响应的实体中得到 处理方式:爬虫中不会遇到 202:请求被接受,但处理尚未完成 处理方式:阻塞等待 204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。 处理方式:丢弃 300:该状态码不被HTTP/1.0的应用程序直接使用, 只是作为3XX类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃 304 请求的资源未更新 处理方式:丢弃 400 非法请求 处理方式:丢弃 401 未授权 处理方式:丢弃 403 禁止 处理方式:丢弃 404 没有找到 处理方式:丢弃 5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求 处理方式:丢弃 HTTPError实例产生后会有一个整型'code'属性,是服务器发送的相关错误号。 Error Codes错误码 当一个错误号产生后,服务器返回一个HTTP错误号,和一个错误页面。 你可以使用HTTPError实例作为页面返回的应答对象response。 这表示和错误属性一样,它同样包含了read,geturl,和info方法。 我们建一个urllib2_test07.py来感受一下: 按下F5可以看见输出了404的错误码,也就说没有找到这个页面。 3.Wrapping 所以如果你想为HTTPError或URLError做准备,将有两个基本的办法。推荐使用第二种。 第一种处理方案: 我们建一个urllib2_test08.py来示范一下第一种异常处理的方案: 和其他语言相似,try之后捕获异常并且将其内容打印出来。 这里要注意的一点,except HTTPError 必须在第一个,否则except URLError将同样接受到HTTPError。 第二种处理方案: 我们建一个urllib2_test09.py来示范一下第二种异常处理的方案:
今日值班:马哥教育二号女神学习顾问,可甜蜜贴心沟通,可严谨职业指导,爱水果也爱生活,会创意更爱学习,陪伴你的成长之路。
【扫一扫即可撩】
3.15真诚大回馈,全部课程限时优惠: Linux面授24期班:前20名优惠400元,仅剩10个席位 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|