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 11 Python
Python的Flask框架中实现分页功能的教程
Apr 20 Python
python创建和删除目录的方法
Apr 29 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
python 类之间的参数传递方式
Dec 20 Python
Python中if有多个条件处理方法
Feb 26 Python
python爬虫实现获取下一页代码
Mar 13 Python
Python restful框架接口开发实现
Apr 13 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 Python
python中pdb模块实例用法
Jan 15 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
PHP 定界符 使用技巧
2009/06/14 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
javascript操作cookie
2017/01/17 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
微信小程序网络请求wx.request详解及实例
2017/05/18 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
python 经典数字滤波实例
2019/12/16 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
装修致歉信
2014/01/15 职场文书
财产公证书
2014/04/10 职场文书
银行催款通知书
2015/04/17 职场文书