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语法快速入门指南
Oct 12 Python
django model去掉unique_together报错的解决方案
Oct 18 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
书单|人生苦短,你还不用python!
Dec 29 Python
实例讲解python中的序列化知识点
Oct 08 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
python常用运维脚本实例小结
Feb 14 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
python开发飞机大战游戏
Jul 15 Python
Python学习之时间包使用教程详解
Mar 21 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中的超全局变量
2006/10/09 PHP
PHP+Tidy-完美的XHTML纠错+过滤
2007/04/10 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
php查看网页源代码的方法
2015/03/13 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
功能强大的php分页函数
2016/07/20 PHP
图片自动更新(说明)
2006/10/02 Javascript
js玩一玩WSH吧
2007/02/23 Javascript
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
python处理excel绘制雷达图
2019/10/18 Python
Python socket处理client连接过程解析
2020/03/18 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
27个经典Linux面试题及答案,你知道几个?
2013/01/10 面试题
自荐书格式
2013/12/01 职场文书
物流专业求职计划书
2014/01/10 职场文书
机关办公室岗位职责
2014/04/16 职场文书
敬老院标语
2014/06/27 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL