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 smallseg分词用法实例分析
May 28 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python读取和保存视频文件
Apr 16 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
python 求定积分和不定积分示例
Nov 20 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 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编写和读取XML的几种方式
2013/01/12 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
$("").click与onclick的区别示例介绍
2014/09/25 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
深入理解Node module模块
2018/03/26 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
Python sys.argv用法实例
2015/05/28 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
pycharm+django创建一个搜索网页实例代码
2018/01/24 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Python中property函数用法实例分析
2018/06/04 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
pycharm创建一个python包方法图解
2019/04/10 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
python 实用工具状态机transitions
2020/11/21 Python
使用canvas一步步实现图片打码功能的方法
2019/06/17 HTML / CSS
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
病危通知书样本
2015/04/17 职场文书
金榜题名主持词
2015/07/02 职场文书