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 学习笔记
Dec 27 Python
详解Python3中的Sequence type的使用
Aug 01 Python
python使用pymysql实现操作mysql
Sep 13 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
python实现word 2007文档转换为pdf文件
Mar 15 Python
Django中反向生成models.py的实例讲解
May 30 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Python find()、rfind()方法及作用
Dec 24 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
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
详解JavaScript树结构
2017/01/09 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Vue + Scss 动态切换主题颜色实现换肤的示例代码
2020/04/27 Javascript
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
python3 shelve模块的详解
2017/07/08 Python
python读取excel表格生成erlang数据
2017/08/26 Python
Python reques接口测试框架实现代码
2020/07/28 Python
详解python内置模块urllib
2020/09/09 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
表达自我的市场:Society6
2018/08/01 全球购物
事业单位请假制度
2014/01/13 职场文书
项目建议书格式
2014/03/12 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
2014年底工作总结
2014/12/15 职场文书
综合办公室岗位职责
2015/04/11 职场文书
学校通报表扬范文
2015/05/04 职场文书
火烧圆明园观后感
2015/06/03 职场文书
小学语文教学随笔
2015/08/14 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python
redis cluster支持pipeline的实现思路
2021/06/23 Redis