![Python网络爬虫从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/915/44509915/b_44509915.jpg)
上QQ阅读APP看书,第一时间看更新
3.4 异常处理
在实现网络请求时,可能会出现很多异常错误,urllib模块中的urllib.error子模块包含了URLError与HTTPError两个比较重要的异常类。
【例3.10】 处理URLError异常。(实例位置:资源包\Code\03\10)
URLError类中提供了一个reason属性,可以通过这个属性了解错误的原因。例如,这里向一个根本不存在网络地址发送请求,然后调用reason属性查看错误原因。示例代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P52_52516.jpg?sign=1738963007-O53yNdcrxoYjKNby0TXTvU5PySl2lYdK-0-b122da3b67cd332b1f62baffd3d704b2)
程序运行结果如下:
Not Found
HTTPError类是URLError类的子类,主要用于处理HTTP请求所出现的异常,该类有以下3个属性。
code:返回HTTP状态码。
reason:返回错误原因。
headers:返回请求头。
【例3.11】 使用HTTPError类捕获异常。(实例位置:资源包\Code\03\11)
使用HTTPError类捕获异常的示例代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P52_52517.jpg?sign=1738963007-QkmCWR9LzMdq9l9ptz7clO3qkgjDMHjg-0-32cc63aa69b19ebd67bb73a4445fce0e)
程序运行结果如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P53_52519.jpg?sign=1738963007-75geKLORkXoKMBLa2oRIYtLQYLQykxsn-0-a54acc05fbb2d9e21ba8959c217d257b)
【例3.12】 双重异常的捕获。(实例位置:资源包\Code\03\12)
由于HTTPError是URLError的子类,有时HTTPError类会有捕获不到的异常,所以可以先捕获子类HTTPError的异常,然后再去捕获父类URLError的异常,这样可以起到双重保险的作用。示例代码如下:
![](https://epubservercos.yuewen.com/8BF9E9/23721540501937606/epubprivate/OEBPS/Images/Figure-P53_52520.jpg?sign=1738963007-VcblLIPAhMEB2Eky9k6fwCBTty5fcRw1-0-c3405b9eb34d719e5c9eea280baf60d3)
程序运行结果如下:
URLError异常信息为: timed out
说明
从以上的运行结果中可以看出,此次超时(timeout)异常是由第二道防线URLError所捕获的。