Python中的异常处理学习笔记


Posted in Python onJanuary 28, 2015

Python 是面向对象的语言,所以程序抛出的异常也是类。

常见的异常类

1.NameError:尝试访问一个没有申明的变量
2.ZeroDivisionError:除数为 0
3.SyntaxError:语法错误
4.IndexError:索引超出序列范围
5.KeyError:请求一个不存在的字典关键字
6.IOError:输入输出错误(比如你要读的文件不存在)
7.AttributeError:尝试访问未知的对象属性
8.TypeError:传给函数的参数类型不正确,比如给 int 函数传入字符型

自定义异常类

尽管内建的异常类已经包括大部分情况,但如果需要创建自己的异常类,可以采用下面的方法:

class CustomException(Exception): # Exception 为所有异常的基类

    # 处理异常的代码

捕获异常

try:  

   # 需要进行捕获异常的代码,只有出现异常之前的代码被最终执行

except (Exception1,Exception2,...) as argument:  

   # 捕获到 (Exception1,Exception2,...) 里的异常才执行本段代码

   # argument 是一个异常类的实例,包含异常的具体信息

except:

   # 捕获到 (Exception1,Exception2,...) 以外的异常执行本段代码,用 sys 模块的 exc_info() 函数可以获取异常信息

else:  

   # 如果没有捕获到异常则执行本段代码

finally:  

   # 无论是否捕获到异常都执行本段代码

上述语句并不都是必须的,譬如 try...except...、try...finally... 或者 try...except...else... 语句都是可行的。我们还可以 用 try...except...else... 代替 if...else...。

抛出异常

如果我们想要在自己编写的程序中主动抛出异常,可以采用如下两种方法:

raise Exception(reason)

Exception 必须是一个异常类的名称。可选项 reason 用来传递异常的信息。

assert expression[,reason]

assert 是断言的关键字。当表达式 expression 为真则什么都不做,否则抛出 AssertionError 异常。reason 提供异常的信息。

上下文管理器

由于对象 File 支持上下文管理协议,因此可以采用下面的方法打开文件:

with open('filename') as fp: 

   # 无论本段代码是否出现异常,文件对象 fp 均能正确关闭

Example

import sys
def div(num, den): 

 print('_________________   (',num,',',den,')\n')

 try:

  ans = num/den

  assert den != num, 'Equal' # 断言:分子分母不相等

  den = 'Changed'            # 如果执行本语句之前未出现异常,改变 den 的值

  if num % 2:                # 如果分子为奇数,则抛出异常

   raise ValueError('Odd')

 except ZeroDivisionError as e:

  print('except ... as ...\n\t', e)

 except:

  print('except\n\t', sys.exc_info())

 else:

  print('else\n\t', ans)

 finally:

  print('finally\n\t', den)
div(1,0) # 除数为零,为 ZeroDivisionError 异常类

div(1,1) # 分子等于分母,断言为假,抛出异常

div(2,1) # 无异常

div(3,1) # 分子为奇数,通过 raise 抛出异常

div(3,'x') # 不属于 ZeroDivisionError 的其他异常

运行结果:
_________________   ( 1 , 0 )
except ... as ...

  division by zero

finally

  0

_________________   ( 1 , 1 )
except

  (<class 'AssertionError'>, AssertionError('Equal',), <traceback object at 0x00000000029B42C8>)

finally

  1

_________________   ( 2 , 1 )
else

  2.0

finally

  Changed

_________________   ( 3 , 1 )
except

  (<class 'ValueError'>, ValueError('Odd',), <traceback object at 0x00000000029B42C8>)

finally

  Changed

_________________   ( 3 , x )
except

  (<class 'TypeError'>, TypeError("unsupported operand type(s) for /: 'int' and 'str'",), <traceback object at 0x00000000029B42C8>)

finally

  x
Python 相关文章推荐
python对DICOM图像的读取方法详解
Jul 17 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
python解释器安装教程的方法步骤
Jul 02 Python
Python预测2020高考分数和录取情况
Jul 08 Python
Python文件夹批处理操作代码实例
Jul 21 Python
Python多线程 Queue 模块常见用法
Jul 04 Python
python使用BeautifulSoup 解析HTML
Apr 24 Python
Python中集合类型(set)学习小结
Jan 28 #Python
Python中使用装饰器和元编程实现结构体类实例
Jan 28 #Python
Python实现Const详解
Jan 27 #Python
python映射列表实例分析
Jan 26 #Python
Python操作MySQL简单实现方法
Jan 26 #Python
Python中的is和id用法分析
Jan 26 #Python
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 #Python
You might like
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
如何离线执行php任务
2017/02/21 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Pycharm以root权限运行脚本的方法
2019/01/19 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
python实现日志按天分割
2019/07/22 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
奇怪的鱼:Weird Fish
2018/03/18 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
大学生职业生涯规划书参考模板
2014/03/05 职场文书
项目建议书模板
2014/05/12 职场文书
医院标语大全
2014/06/23 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
CentOS下安装Jenkins的完整步骤
2022/04/07 Servers
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL