文章目录
一、说明
在我们请求的过程中会遇到网络不好或者程序连接有问题的情况,如果这些异常不处理,程序可能会因为报错而终止运行。
二、URLError
URLError类来自于urllib库的error模块,是error异常模块中的基类,由request模块中的异常都可以通过这个类处理。
from urllib import request,error
try:
responde = request.urlopen("https://www.baidu.com/nihao.html")
except error.URLError as e:
print(e.reason)
运行结果:
它只有一个reason属性,可以查看错误信息,这样我们就可以有效处理异常。
三、HTTPError
他是URLERROR的子类,专门处理HTTP请求错误,比如认证失败,有三个属性
- code:返回HTTP状态码
- reason:返回错误原因
- header:返回请求头
try:
response = request.urlopen('https://www.baidu.com/nihao.html')
except error.HTTPError as e:
print(e.reason, e.code, e.headers, sep="\n")
# 因为URLERROR是HTTPERROR的父类,所以可以先捕捉子类的错误,再捕获父类的错误
except error.URLError as e:
print(e.reason)
else:
print("request success")
运行结果:
依次输出reason、code、header。代码中先捕获HTTPError,获取错误信息,如果不是HTTPError异常,再捕获URLError异常。
有时候reason属性返回来的不一定是一个字符串,还可能是一个对象
try:
response = request.urlopen("https://www.baidu.com", timeout=0.001)
except urllib.error.URLError as e:
print(type(e.reason))
if isinstance(e.reason, socket.timeout):
print("TIME OUT")
运行结果
reason 是一个socket.timeout类,我们可以判断出他的类型,做出更详细的异常判断。