详解在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 采集中文乱码问题的完美解决方法
Sep 27 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
Python内存读写操作示例
Jul 18 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
如何通过Python实现标签云算法
Jul 02 Python
Django Docker容器化部署之Django-Docker本地部署
Oct 09 Python
如何解决django-celery启动后迅速关闭
Oct 16 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
Django Session和Cookie分别实现记住用户登录状态操作
Jul 02 Python
Pycharm常用快捷键总结及配置方法
Nov 14 Python
python引入其他文件夹下的py文件具体方法
May 23 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
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
Python判断文本中消息重复次数的方法
2016/04/27 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Django 路由控制的实现
2019/07/17 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
python实现双人五子棋(终端版)
2020/12/30 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
一篇.NET面试题
2014/09/29 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
高二物理教学反思
2014/02/08 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
教师业务培训方案
2014/05/01 职场文书
上课说话检讨书500字
2014/11/01 职场文书
优秀教师事迹材料
2014/12/15 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang