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 29 Python
python使用sqlite3时游标使用方法
Mar 13 Python
python画一个玫瑰和一个爱心
Aug 18 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
python 字典操作提取key,value的方法
Jun 26 Python
python实现证件照换底功能
Aug 20 Python
详解pyinstaller selenium python3 chrome打包问题
Oct 18 Python
python基于opencv检测程序运行效率
Dec 28 Python
Python3 元组tuple入门基础
Feb 09 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
python super()函数的基本使用
Sep 10 Python
Python基础 括号()[]{}的详解
Nov 07 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抽象类 介绍
2012/06/13 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
php的常量和变量实例详解
2017/06/27 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
event.X和event.clientX的区别分析
2011/10/06 Javascript
jquery 插件开发 extjs中的extend用法小结
2013/01/04 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
PyQt5实现拖放功能
2018/04/25 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
电气工程和自动化自荐信范文
2013/12/25 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
质量月活动总结
2014/08/26 职场文书
秋菊打官司观后感
2015/06/03 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android