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回调函数的使用方法
Jan 23 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
Python中的字符串替换操作示例
Jun 27 Python
python中字符串类型json操作的注意事项
May 02 Python
python实现微信远程控制电脑
Feb 22 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
python实现LRU热点缓存及原理
Oct 29 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
Python 找出出现次数超过数组长度一半的元素实例
May 11 Python
python复合条件下的字典排序
Dec 18 Python
python中validators库的使用方法详解
Sep 23 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
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
JS高级运动实例分析
2016/12/20 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
vue小白入门教程
2018/04/02 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
vue--vuex详解
2019/04/15 Javascript
JavaScript实现横版菜单栏
2020/03/17 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
Python3读取文件常用方法实例分析
2015/05/22 Python
Python中的自省(反射)详解
2015/06/02 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Python Django view 两种return的实现方式
2020/03/16 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
使用html2canvas将页面转成图并使用用canvas2image下载
2019/04/04 HTML / CSS
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
医学生自荐信范文
2013/12/03 职场文书
微电影大赛策划方案
2014/06/05 职场文书
合理化建议书范文
2015/09/14 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL