详解在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中迭代器(iterator)用法实例分析
Apr 29 Python
Python下的常用下载安装工具pip的安装方法
Nov 13 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
Python判断两个对象相等的原理
Dec 12 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
python使用response.read()接收json数据的实例
Dec 19 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
Python双链表原理与实现方法详解
Feb 22 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 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
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
js特效,页面下雪的小例子
2013/06/17 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
手写Vue弹窗Modal的实现代码
2019/09/11 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
跟老齐学Python之开始真正编程
2014/09/12 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
Django模板Templates使用方法详解
2019/07/19 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Python如何将函数值赋给变量
2020/04/28 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
面试通知邮件
2015/04/20 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS