Python异常学习笔记


Posted in Python onFebruary 03, 2015

异常(exceptions)是Python中一种非常重要的类型,它和语法错误不同,是在程序运行期间引发的错误。Python中内置了很多异常,如IOError,NameError,KeyboardInterrupt等,更多的异常可以点击这里。

异常的意义在于提供一种更加优雅的运行方式,例如用Python编写一个计算器,如果用户输入不能计算的对象,则可以抛出异常,并进行处理, 如下:

while True:
  try:
    x= int(input('Please In enter A number:'))
    print "Your Input is %s"%x
    break
  except Exception,e:
    print e

Python是一门面向对象的语言,异常本身也是对象, 用dir(Exception)查看Exception类的属性,如下:[‘__class__', ‘__delattr__', ‘__dict__', ‘__doc__', ‘__format__', ‘__getattribute__', ‘__getitem__', ‘__getslice__', ‘__hash__', ‘__init__', ‘__new__', ‘__reduce__', ‘__reduce_ex__', ‘__repr__', ‘__setattr__', ‘__setstate__', ‘__sizeof__','__str__', ‘__subclasshook__', ‘__unicode__', ‘args', ‘message'], 除开args和message外,其余的均为其内部属性, 其中args是传递给异常类的构造函数的一个类型为元祖的参数, 一些内置函数,如IOError需要它接收多个参数,其它的则直接是直接传递一个错误提示字符串。

Python的异常可以通过try语句来检查,任何在try语句块里的代码都会被监测,检查有无异常产生,except会根据输入检查异常的类型,并执行except内的代码。那么,这里就不禁要问问,except后面的两个参数到底是什么?如果第一个是错误的类型,那么第二参数呢?对其进行检测,发现它是属于Exception的实例,也就是说,它是由异常类产生的一个具体的异常对象。
那么,用户如果自定义一个异常呢?Python中规定,所有异常必须直接或者间接的继承自Exception类,如下,自定义的异常:

#!/usr/bin/env python
class MyError(Exception):
  def __init__(self,*args):
    self.value=args[0]
  def __str__(self):
    return repr(self.value)
def showname(*args):
  if args:
    print args
  else:
    raise MyError('Error: need 1 arguments at last, 0 Input')

把这个文件保存为showname.py,其它模块就可以引入调用showname函数,并对它执行的结果进行检测:

#!/usr/bin/env python
import showname
try:
  showname.showname()
except showname.MyError,e:
  print e

值得注意的几点是:1, python中用raise抛出异常; 2, 由于所有异常都是继承自Exception,所以,当不确定异常类型的时候,可以在except后面直接接Exception来捕获所有异常;3,由于异常的继承关系,异常内的所有属性都是可以被重定义的,也可以在自定义的异常上增加属性。

Python 相关文章推荐
python正则表达式re模块详细介绍
May 29 Python
Python实现多线程下载文件的代码实例
Jun 01 Python
python分布式环境下的限流器的示例
Oct 26 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
python 遍历pd.Series的index和value
Nov 26 Python
python实现指定ip端口扫描方式
Dec 17 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
python软件都是免费的吗
Jun 18 Python
Python命名空间及作用域原理实例解析
Aug 12 Python
详解Python 函数参数的拆解
Sep 02 Python
python3 hdf5文件 遍历代码
May 19 Python
Python中的迭代器漫谈
Feb 03 #Python
Python描述器descriptor详解
Feb 03 #Python
理解Python中的With语句
Feb 02 #Python
Linux环境下MySQL-python安装过程分享
Feb 02 #Python
Python中用pycurl监控http响应时间脚本分享
Feb 02 #Python
Python列表(list)常用操作方法小结
Feb 02 #Python
Python Sleep休眠函数使用简单实例
Feb 02 #Python
You might like
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
Extjs学习笔记之七 布局
2010/01/08 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
动态创建样式表在各浏览器中的差异测试代码
2011/09/13 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
require.js的用法详解
2015/10/20 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
python使用Berkeley DB数据库实例
2014/09/26 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
Python 判断奇数偶数的方法
2018/12/20 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
创业者是否需要商业计划书?
2014/02/07 职场文书
新闻专业学生的自我评价
2014/02/13 职场文书
全国文明单位申报材料
2014/05/31 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
Mysql 如何查询时间段交集
2021/06/08 MySQL
MySQL 5.7常见数据类型
2021/07/15 MySQL