标签:收信 == ade set www. 函数 close 实例 异常
这一节我们主要讲解处理异常
在我们发送请求的时候,有的时候可能网络不好,出现了异常,程序因为报错而终止运行,为此我们需要对其进行处理
urllib里的error模块定义了request模块产生的异常,下面便介绍里面的函数:
该类是继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以由这个类捕抓,它具有一个reason属性
import urllib.error,urllib.request
try:
response = urllib.request.urlopen(‘https://cuiqingcai.com/index.htm‘)
except urllib.error.URLError as e:
print(e.reason)
正常程序会报错,但最终程序输出的却是Not Found
值得注意的是,在程序运行中,如果Import 的是import urllib.error那么后面使用的时候也要urllib.error.URLError,如果import的是from urllib impoort request,error那么后面就可以直接request.urlopen,error.URLError等
这个是URLError的子类,专门用来处理HTTP的请求错误,比如认证请求失败等,他有三个属性:
code:返回HTTP状态码,比如404表示网页不存在,505表示服务器内部错误
reason:返回错误的原因
headers:返回请求头
下面上实例:
from urllib import request,error
try:
response = request.urlopen(‘https://cuiqingcai.com/index.htm‘)
except error.HTTPError as e:
print(e.reason,e.code,e.headers)
===================== RESTART: F:\Python\exercise\ok.py ===================
Not Found 404 Server: nginx/1.10.3 (Ubuntu) Date: Fri, 17 Aug 2018 03:14:05 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: close Vary: Cookie Expires: Wed, 11 Jan 1984 05:00:00 GMT Cache-Control: no-cache, must-revalidate, max-age=0 Link: <https://cuiqingcai.com/wp-json/>; rel="https://api.w.org/"
因为HTTPError是URLError的子类,所以可以选择捕获错误时先捕获子类的,再去捕获父类的
from urllib import request,error
try:
response = request.urlopen(‘https://cuiqingcai.com/index.htm‘)
except error.HTTPError as e:
print(e.reason,e.code,e.headers)
except error.URLError as e:
print(e.reason)
else:
print(‘Request Successfully‘)
有时候reason返回的不是一个字符串也可能为一个对象,这时候有可能要用到socket库
socket 是网络连接端点。例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听。两端使用各自的socket来发送和 接收信息。
import socket
import urllib.request
import urllib.error
try:
response = urllib.request.urlopen(‘https://www.baidu.com‘,timeout = 0.01)
except urllib.error.URLError as e:
print(type(e.reason))
if isinstance(e.reason,socket.timeout):
print(‘TIME OUT‘)
===================== RESTART: F:\Python\exercise\ok.py ===================
<class ‘socket.timeout‘>
TIME OUT
可见设置超时时间使程序强制执行了timeout异常(type函数不会认为子类是父类的一种类型,但isinstance会认为是)
标签:收信 == ade set www. 函数 close 实例 异常
原文地址:https://www.cnblogs.com/gausstu/p/9500922.html