浅谈Python的异常处理


Posted in Python onJune 19, 2016

 Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

注意:虽然大多数错误会导致异常,但一个异常不一定代表错误,有时候它们只是一个警告,有时候它们可能是一个终止信号,比如退出循环等。

一.与python异常相关的关键字

raise:手动抛出/引发异常:raise [exception[,data]
try/except:捕获异常并处理
pass:忽略异常
as:定义异常实例(except IOError as e)
finally:无论是否出现异常,都执行的代码]
else:如果try中的语句没有引发异常,则执行else中的语句
except Exception as error:

二.python中的异常类型

1.StandardError类:如果程序上出现逻辑错误, 将引发该异常。StandardError类是所有内敛异常的基类,放置在默认的命名空间中,因此使用IOEroor, EOFError, ImportError等类,不需要导入exception模块。

StopIteration类:判断循环是否执行到尾部,如果循环到尾部,则抛出该异常。
GeneratorExit类:是由Generator函数引发的异常,当调用close()时引发该异常。
Warning类:表示程序中的代码引起的警告。

三.基本方式:

1.try:

        语句1

  except  [exception1(,exception2...),[data…]]:

       语句2

  else:

       语句3

该种异常处理语法的规则是:

·   执行try下的语句,如果引发异常,则执行过程会跳到第一个except语句。

·   如果第一个except中定义的异常与引发的异常匹配,则执行该except中的语句。

·   如果引发的异常不匹配第一个except,则会搜索第二个except,允许编写的except数量没有限制。

·   如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

·   如果没有发生异常,则执行else块代码。

import traceback
try:
  1/0
except Exception as err:
  print(err)
try:
  f = open("file.txt","r")
except IOError as e:
  print(e)
try:
  f = open("file.txt","r")
except Exception as e:
  print(e)

 最后两个的输出是一模一样的---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.try:

      语句1

  finally:

      语句2

该语句的执行规则是:

·   执行try下的代码。

·   如果发生异常,在该异常传递到下一级try时,执行finally中的代码。

·   如果没有发生异常,则执行finally中的代码。

第二种try语法在无论有没有发生异常都要执行代码的情况下是很有用的。例如我们在python中打开一个文件进行读写操作,我在操作过程中不管是否出现异常,最终都是要把该文件关闭的。这两种形式相互冲突,使用了一种就不允许使用另一种,而功能又各异

所以,一般情况下,finally里面执行的都是一些清理工作,比如:关闭文件描述符,释放锁等

注意,finally中,如果出现异常,外部如果没有相应的捕获机制,该异常会层层抛出,直到最顶端,然后解释器停止。一般在外层再加一次try except异常捕获

三.手动使用raise引发异常

1.raise [exception[,data]]

2.在Python中,要想引发异常,最简单的形式就是输入关键字raise,后跟要引发的异常的名称。异常名称标识出具体的类:Python异常是那些类的对象。执行raise语句时,Python会创建指定的异常类的一个对象。raise语句还可指定对异常对象进行初始化的参数。为此,请在异常类的名称后添加一个逗号以及指定的参数(或者由参数构成的一个元组)。

3.实例:

try:
  print("开始测试")
  raise IOError
except IOError:
  print("定义好的错误")
except:
  print("别的错误")
Python 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
May 15 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
通过代码简单了解django model序列化作用
Nov 12 Python
Python中lru_cache的使用和实现详解
Jan 25 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 Python
qpython3 读取安卓lastpass Cookies
Jun 19 #Python
python3实现读取chrome浏览器cookie
Jun 19 #Python
python3 实现的人人影视网站自动签到
Jun 19 #Python
python3实现暴力穷举博客园密码
Jun 19 #Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 #Python
Python中使用装饰器来优化尾递归的示例
Jun 18 #Python
举例讲解Python面向对象编程中类的继承
Jun 17 #Python
You might like
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
JS严格模式原理与用法实例分析
2020/04/27 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
python删除文件示例分享
2014/01/28 Python
python中异常报错处理方法汇总
2016/11/20 Python
python3读取csv和xlsx文件的实例
2018/06/22 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
美国五金商店:Ace Hardware
2018/03/27 全球购物
成教毕业生自我鉴定
2013/10/23 职场文书
教师找工作推荐信
2013/11/23 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
施工班组长岗位职责
2014/01/05 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB
python中pymysql包操作数据库方法
2022/04/19 Python