一、URLrror

当我们的urlopen无法处理一个响应的时候就会出现一个urlerror的错误,但同时url会伴随一个res的属性,包含一个由错误编码和错误信息url

举例:

import urllib.error
import urllib.request
req = urllib.request.Request("http://www.ooxx-fishc.com")
try:
urllib.request.urlopen(req)
except urllib.error.URLError as e:
print(e.reason) [Errno 8] nodename nor servname provided, or not known
>>> #没有这个域名,所以采用异常处理

二、 HTTPError

HTTPError 是 URLError 的子类,服务器上每一个 HTTP 的响应都包含一个数字的“状态码”。

有时候状态码会指出服务器无法完成的请求类型,一般情况下 Python 会帮你处理一部分这类响应(例如,响应的是一个“重定向”,要求客户端从别的地址来获取文档,那么 urllib 会自动为你处理这个响应。);但是呢,有一些无法处理的,就会抛出 HTTPError 异常。这些异常包括典型的:404(页面无法找到),403(请求禁止)和 401(验证请求)。

因为 Python 默认会自动帮你处理重定向方面的内容(状态码 300 ~ 399 范围),状态码 100 ~ 299 的范围是表示成功,所以你需要关注的是 400 ~ 599 这个范围的状态码(因为它们代表响应出了问题)。

其中,出现 4xx 的状态码,说明问题来自客户端,就是你自己哪里做错了;出现 5xx 的状态码,那就表示与你无关了,是来自服务器的问题。

参考文档:https://fishc.com.cn/thread-103840-1-5.html

三、处理异常的两种写法

第一种:
from urllib.request import Request,urlopen
from urllib.error import URLError,HTTPError req = Request(someurl)
try:
resposen = urlopen(req)
except HTTPError as e:
print('The server couldn\'t fullfill the request')
print('Error code :',e.code)
except URLError as e:
print('We failed to reach a server.')
print('Reason: ',e.reason)
else:
everything is fine #需要注意,HTTPError 是要写在URLError前面,因为URLError包含HTTPError
第二种写法:

from urllib.request import Request,urlopen
from urllib.error import URLError,HTTPError req = Request(someurl)
try:
resposen = urlopen(req)
except URLError as e:
if hasattr(e,'reason'):
print('We failed to reach a server.')
print('Reason',e.reason)
elif hasattr(e,'code'):
print('The server could\'t fullfill the request')
print('Error code:',e.code)
else:
everything is fine #有异常,如果有异常的原因把异常的原因打印出来,如果有code同时也把code打印出来

【Python61--异常处理】的更多相关文章

  1. 关于.NET异常处理的思考

    年关将至,对于大部分程序员来说,马上就可以闲下来一段时间了,然而在这个闲暇的时间里,唯有争论哪门语言更好可以消磨时光,估计最近会有很多关于java与.net的博文出现,我表示要作为一个吃瓜群众,静静的 ...

  2. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  3. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

  4. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  5. IL异常处理

    异常处理在程序中也算是比较重要的一部分了,IL异常处理在C#里面实现会用到一些新的方法 1.BeginExceptionBlock:异常块代码开始,相当于try,但是感觉又不太像 2.EndExcep ...

  6. Spring MVC重定向和转发以及异常处理

    SpringMVC核心技术---转发和重定向 当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向.而根据要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器.对于 ...

  7. 【repost】JS中的异常处理方法分享

    我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...

  8. 札记:Java异常处理

    异常概述 程序在运行中总会面临一些"意外"情况,良好的代码需要对它们进行预防和处理.大致来说,这些意外情况分三类: 交互输入 用户以非预期的方式使用程序,比如非法输入,不正当的操作 ...

  9. 关于bug分析与异常处理的一些思考

    前言:工作三年了,工作内容主要是嵌入式软件开发和维护,用的语言是C,毕业后先在一家工业自动化控制公司工作两年半,目前在一家医疗仪器公司担任嵌入式软件开发工作.软件开发中,难免不产生bug:产品交付客户 ...

  10. ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

随机推荐

  1. js 图片与base64互相转换

    js将图片转化为base64 参考地址:http://www.cnblogs.com/mr-wuxiansheng/p/6931077.html var img = "imgurl" ...

  2. OJ#1002 又是a+b

    题目描述: 给定两个正整数a.b(0 < a,b < =10000),求出a+b的和 输入描述: 多组输入,每组输入为一行,里面有2个数a,b(0 < a,b < =10000 ...

  3. Palindromic Matrix

    Palindromic Matrix time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. nginx获取uri里面的参数

    add_header Content-Disposition "attachment;fileName=$arg_filename"; 请求连接为:10.26.1.165/abc? ...

  5. ZOJ 4060 - Flippy Sequence - [思维题][2018 ACM-ICPC Asia Qingdao Regional Problem C]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4060 题意: 给出两个 $0,1$ 字符串 $S,T$,现在你有 ...

  6. OAuth2.0的原理介绍

    OAuth2.0是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. OAuth2.0(开放授权)是一个正式的互联网标准协议. 允许第三方网站在用户 ...

  7. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin   Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...

  8. Vue2.0 v-for 中 :key 到底有什么用?

    要解释 key 的作用,不得不先介绍一下虚拟 DOM 的 Diff 算法了. vue 和 react 的虚拟 DOM 的Diff算法大致相同,其核心是基于两个简单的假设: 1.两个相同的组件产生类似的 ...

  9. 初始化vue项目,报错This is probably not a problem with npm,there is likely additional logging output above

    https://blog.csdn.net/ink_if/article/details/79015811 参考别人的博客 初始化项目,vue init webpack-simple demo 然后n ...

  10. JMeter_方案上架,遇到的问题及解决

    问题:手动输入时间接口正确,但是不会在前端展示 解决:发布时间.加入时间设置为服务器时间,服务器时间通过接口自动获取到