详解在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的三目运算符和not in运算符使用示例
Mar 03 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
python2.7实现FTP文件下载功能
Apr 15 Python
Python中Numpy mat的使用详解
May 24 Python
Django 路由控制的实现
Jul 17 Python
Django Rest framework频率原理与限制
Jul 26 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
什么是python的id函数
Jun 11 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
linux中nohup和后台运行进程查看及终止
Jun 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
Discuz! Passport 通行证整合
2008/03/27 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
php实例分享之二维数组排序
2014/05/15 PHP
JavaScript创建命名空间的5种写法
2014/06/24 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php微信公众平台开发类实例
2015/04/01 PHP
google地图的路线实现代码
2009/08/20 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python实现简单坦克大战
2020/03/27 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
财务人员担保书
2014/05/13 职场文书
毕业生面试求职信
2014/06/23 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
《藏戏》教学反思
2016/02/23 职场文书
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电
基于Python实现射击小游戏的制作
2022/04/06 Python