异常处理:
- URLError
import urllib.request
import urllib.error
try:
urllib.request.urlopen("URL")
except urllib.error.URLError as e:
#打印异常code
print(e.code)
#打印异常原因
print(e.reason)
- HTTPError
import urllib.request
import urllib.error
try:
urllib.request.urlopen("URL")
except urllib.error.HTTPError as e:
#打印异常code
print(e.code)
#打印异常原因
print(e.reason)
- 常见状态码:
200 | OK 一切正常 |
301 | Moved Permanently 重定向到新的URL,永久性 |
302 | Found 重定向到临时的URL,临时性 |
304 | Not Modified 请求的资源未更新 |
400 | Bad Request 非法请求 |
401 | unauthorized 请求未经授权 |
403 | Forbidden 禁止访问 |
404 | Not Found 没有找到对应网页 |
500 | Internal Server Error 服务器内部出现错误 |
501 | Not Implemented 服务器不支持实现请求所需要的功能 |
HTTPError:无法处理的异常
- 连接不上服务器
- 远程URL不存在
- 无网络引起的异常
在实际处理异常时,我们并不知道具体是什么异常。此时我们可以优化相应的代码,先让其用HTTPError子类进行处理,若无法处理,再进行URLError处理。
import urllib.request
import urllib.error
try:
urllib.request.urlopen("网址")
except urllib.error.URLError as e:
if hasatter(e,"code"):
print(e,code)
if hasatter(e,"reason"):
print(e,reason)
最后值得注意的一点是,如果想用HTTPError和URLError一起捕获异常,那么需要将HTTPError放在URLError的前面,因为HTTPError是URLError的一个子类。如果URLError放在前面,出现HTTP异常会先响应URLError,这样HTTPError就捕获不到错误信息了。