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 七种邮件内容发送方法实例
Apr 22 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
Python测试人员需要掌握的知识
Feb 08 Python
详解Python with/as使用说明
Dec 13 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
Python安装whl文件过程图解
Feb 18 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
python将dict中的unicode打印成中文实例
May 11 Python
keras topN显示,自编写代码案例
Jul 03 Python
Python中json.dumps()函数的使用解析
May 17 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
yii操作cookie实例简介
2014/07/09 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
Python入门篇之字符串
2014/10/17 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
应届毕业生求职信范文分享
2013/12/26 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
任命书范本大全
2014/06/06 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js