详解在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发送各种形式的邮件的方法汇总
Nov 09 Python
Python中functools模块的常用函数解析
Jun 30 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
django如何自定义manage.py管理命令
Apr 27 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php木马webshell扫描器代码
2012/01/25 PHP
dedecms中使用php语句指南
2014/11/13 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
php实现word转html的方法
2016/01/22 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
客服主管岗位职责
2013/12/13 职场文书
个人求职信范例
2014/01/29 职场文书
代办委托书怎样写
2014/04/08 职场文书
项目经理任命书
2014/06/04 职场文书
小学运动会班级口号
2014/06/09 职场文书
班级课外活动总结
2014/07/09 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers