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通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
python中sleep函数用法实例分析
Apr 29 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
Django Admin实现三级联动的示例代码(省市区)
Jun 22 Python
python实现彩票系统
Jun 28 Python
详解Numpy中的广播原则/机制
Sep 20 Python
Python类中方法getitem和getattr详解
Aug 30 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
python list多级排序知识点总结
Oct 23 Python
Python读取yaml文件的详细教程
Jul 21 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
基于Python实现股票收益率分析
Apr 02 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php中http_build_query 的一个问题
2012/03/25 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
typecho插件编写教程(二):写一个新插件
2015/05/28 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
浅谈JS之tagNaem和nodeName
2016/09/13 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
Element Steps步骤条的使用方法
2020/07/26 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
深入解读Python解析XML的几种方式
2016/02/16 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
Python continue继续循环用法总结
2018/06/10 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
Django 路由层URLconf的实现
2019/12/30 Python
python3中数组逆序输出方法
2020/12/01 Python
介绍下Java中==和equals的区别
2013/09/01 面试题
医药代表个人的求职信分享
2013/12/08 职场文书
北京大学自荐信范文
2014/01/28 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
给校长的建议书
2014/03/12 职场文书
股东授权委托书
2014/10/15 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL