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 14 Python
python进阶教程之函数对象(函数也是对象)
Aug 30 Python
Python SQLite3简介
Feb 22 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
Oct 17 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
Python 操作 MySQL数据库
Sep 18 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
python文件与路径操作神器 pathlib
Apr 01 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP中header用法小结
2016/05/23 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
万能的php分页类
2017/07/06 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
Json按某个键的值进行排序
2016/12/22 Javascript
js模拟微博发布消息
2017/02/23 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
python图像处理入门(一)
2019/04/04 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
自荐信结尾
2013/10/27 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
四年级语文教学反思
2014/02/05 职场文书
二手房购房意向书范本
2014/04/01 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
三方股东合作协议书
2014/10/28 职场文书
优秀班主任材料
2014/12/16 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
婚育证明样本
2015/06/16 职场文书