详解在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实现多线程采集的2个代码例子
Jul 07 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
详解Python编程中基本的数学计算使用
Feb 04 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
Python对List中的元素排序的方法
Apr 01 Python
Django中使用Celery的教程详解
Aug 24 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
python getpass实现密文实例详解
Sep 24 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
python前后端自定义分页器
Apr 13 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安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
php实现多城市切换特效
2015/08/09 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
JS中的三个循环小结
2017/06/20 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
Python中is和==的区别详解
2018/11/15 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
Django 多环境配置详解
2019/05/14 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python连接PostgreSQL过程解析
2020/02/09 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
庆七一活动方案
2014/01/25 职场文书
2014年中秋节活动总结
2014/08/29 职场文书