详解在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之禅》中对于Python编程过程中的一些建议
Apr 03 Python
python获得一个月有多少天的方法
Jun 04 Python
python爬取微信公众号文章的方法
Feb 26 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
python matplotlib折线图样式实现过程
Nov 04 Python
wxPython实现分隔窗口
Nov 19 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
python 动态渲染 mysql 配置文件的示例
Nov 20 Python
python 简单的调用有道翻译
Nov 25 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伪造referer的方法 利用referer防止图片盗链
2014/01/20 PHP
简单实现PHP留言板功能
2016/12/21 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
JavaScript静态的动态
2006/09/18 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
TensorFlow Session会话控制&amp;Variable变量详解
2018/07/30 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
智能钱包:Ekster
2019/11/21 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
毕业生求职的求职信
2013/12/05 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
创建文明学校实施方案
2014/03/11 职场文书
房地产推广策划方案
2014/05/19 职场文书
征用土地赔偿协议书
2014/09/26 职场文书