详解在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程序设计入门(5)类的使用简介
Jun 16 Python
python迭代器实例简析
Sep 25 Python
python进程类subprocess的一些操作方法例子
Nov 22 Python
python实现中文转换url编码的方法
Jun 14 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python Selenium 之关闭窗口close与quit的方法
Feb 13 Python
python实现京东订单推送到测试环境,提供便利操作示例
Aug 09 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
Python 自由定制表格的实现示例
Mar 20 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
python中adb有什么功能
Jun 07 Python
Python3爬虫带上cookie的实例代码
Jul 28 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实现分页的一个示例
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
Yii2实现增删改查后留在当前页的方法详解
2017/01/13 PHP
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
浅析vue数据绑定
2017/01/17 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
基于hover的用法实例(推荐)
2017/07/04 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
pycharm显示远程图片的实现
2019/11/04 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
python如何实现单链表的反转
2020/02/10 Python
Python安装Bs4的多种方法
2020/11/28 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
蒂娜商店:Tiina the Store
2019/12/07 全球购物
简述数组与指针的区别
2014/01/02 面试题
政法大学毕业生自荐信范文
2014/01/01 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
团队拓展活动方案
2014/08/28 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
生死抉择观后感
2015/06/09 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python