详解在Python程序中自定义异常的方法


Posted in Python onOctober 16, 2015

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。

class Networkerror(RuntimeError):
  def __init__(self, arg):
   self.args = arg

在你定义以上类后,你可以触发该异常,如下所示:

try:
  raise Networkerror("Bad hostname")
except Networkerror,e:
  print e.args

在下面这个例子中,默认的__init__()异常已被我们重写。

>>> class MyError(Exception):
...   def __init__(self, value):
...     self.value = value
...   def __str__(self):
...     return repr(self.value)
...
>>> try:
...   raise MyError(2*2)
... except MyError as e:
...   print 'My exception occurred, value:', e.value
...
My exception occurred, value: 4
>>> raise MyError, 'oops!'
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
__main__.MyError: 'oops!'

常见的做法是创建一个由该模块定义的异常基类和子类,创建特定的异常类不同的错误条件。

我们通常定义的异常类,会让它比较简单,允许提取异常处理程序的错误信息,当创建一个异常模块的时候,常见的做法是创建一个由该模块定义的异常基类和子类,根据不同的错误条件,创建特定的异常类:

class Error(Exception):
  """Base class for exceptions in this module."""
  pass

class InputError(Error):
  """Exception raised for errors in the input.

  Attributes:
    expression -- input expression in which the error occurred
    message -- explanation of the error
  """

  def __init__(self, expression, message):
    self.expression = expression
    self.message = message

class TransitionError(Error):
  """Raised when an operation attempts a state transition that's not
  allowed.

  Attributes:
    previous -- state at beginning of transition
    next -- attempted new state
    message -- explanation of why the specific transition is not allowed
  """

  def __init__(self, previous, next, message):
    self.previous = previous
    self.next = next
    self.message = message
Python 相关文章推荐
python使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 Python
python中的列表推导浅析
Apr 26 Python
Python中文编码那些事
Jun 25 Python
利用Python为iOS10生成图标和截屏
Sep 24 Python
python学习必备知识汇总
Sep 08 Python
Python制作exe文件简单流程
Jan 24 Python
python脚本后台执行方式
Dec 21 Python
关于Tensorflow分布式并行策略
Feb 03 Python
Python递归函数特点及原理解析
Mar 04 Python
python是怎么被发明的
Jun 15 Python
python交互模式基础知识点学习
Jun 18 Python
python中可以声明变量类型吗
Jun 18 Python
Python编程中的文件操作攻略
Oct 16 #Python
详解Python编程中包的概念与管理
Oct 16 #Python
解读Python编程中的命名空间与作用域
Oct 16 #Python
Python中的模块导入和读取键盘输入的方法
Oct 16 #Python
Python中基本的日期时间处理的学习教程
Oct 16 #Python
简单介绍使用Python解析并修改XML文档的方法
Oct 15 #Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 #Python
You might like
如何去掉文章里的 html 语法
2006/10/09 PHP
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python脚本爬取字体文件的实现方法
2017/04/29 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
详解python 注释、变量、类型
2018/08/10 Python
python实现贪吃蛇游戏
2020/03/21 Python
关于python多重赋值的小问题
2019/04/17 Python
python实现五子棋游戏
2019/06/18 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
办公室文秘自我评价
2013/09/21 职场文书
中职生自我鉴定范文
2013/10/03 职场文书
安全资料员岗位职责
2013/12/14 职场文书
公司企业表扬信
2014/01/11 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
保险公司早会主持词
2014/03/22 职场文书
中学生检讨书1000字
2014/10/28 职场文书
骨干教师事迹材料
2014/12/17 职场文书