详解在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 相关文章推荐
wxPython窗口中文乱码解决方法
Oct 11 Python
Python中使用语句导入模块或包的机制研究
Mar 30 Python
python定时器(Timer)用法简单实例
Jun 04 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
Django配置celery(非djcelery)执行异步任务和定时任务
Jul 16 Python
python远程连接MySQL数据库
Apr 19 Python
python实现按关键字筛选日志文件
Dec 24 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
Mar 30 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
Python常用扩展插件使用教程解析
Nov 02 Python
浅析python中特殊文件和特殊函数
Feb 24 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静态类的原罪详解
2013/05/06 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
jQuery事件详解
2017/02/23 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
浅谈python3中input输入的使用
2019/08/02 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
旅游安全协议书
2014/04/21 职场文书
物业保安岗位职责
2014/07/02 职场文书
中国梦团日活动总结
2014/07/07 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS