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实现扫描端口示例
Mar 29 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
python将ip地址转换成整数的方法
Mar 17 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
Python求离散序列导数的示例
Jul 10 Python
Python实现生成密码字典的方法示例
Sep 02 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
Python实现机器学习算法的分类
Jun 03 Python
python中的random模块和相关函数详解
Apr 22 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
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
微信小程序自定义组件
2017/08/16 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
Python3实现生成随机密码的方法
2014/08/23 Python
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
老生常谈python中的重载
2018/11/11 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
Linux操作面试题
2012/05/16 面试题
EntityManager都有哪些方法
2013/11/01 面试题
降消项目实施方案
2014/03/30 职场文书
房产转让协议书
2014/04/11 职场文书
小学一年级评语大全
2014/04/22 职场文书
关于读书的活动方案
2014/08/14 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
实习指导老师意见
2015/06/04 职场文书