详解在Python程序中自定义异常的方法

 更新时间:2015年10月16日 17:43:12   投稿:goldensun  
这篇文章主要介绍了详解在Python程序中自定义异常的方法,是Python入门学习中的基础知识,需要的朋友可以参考下

通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自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用正则表达式提取/匹配中文汉字

    在使用Python的过程中,由于需求原因,我们经常需要在文本或者网页元素中用Python正则表达式匹配中文,下面这篇文章主要给大家介绍了关于python用正则表达式提取/匹配中文汉字的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python实现本地缓存的几种方法小结

    Python实现本地缓存的几种方法小结

    缓存是一种常见的技术,用于存储重复请求的结果,Python 作为一种灵活的编程语言,提供了多种实现本地缓存的方法,本文将探讨 Python 中实现本地缓存的几种策略,并提供具体的代码示例,感兴趣的小伙伴跟着小编一起来看看吧
    2024-07-07
  • Python3使用正则表达式爬取内涵段子示例

    Python3使用正则表达式爬取内涵段子示例

    这篇文章主要介绍了Python3使用正则表达式爬取内涵段子,涉及Python正则匹配与文件读写相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • python编写朴素贝叶斯用于文本分类

    python编写朴素贝叶斯用于文本分类

    这篇文章主要为大家详细介绍了python编写朴素贝叶斯用于文本分类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • PyQt5根据控件Id获取控件对象的方法

    PyQt5根据控件Id获取控件对象的方法

    今天小编就为大家分享一篇PyQt5根据控件Id获取控件对象的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python基于unittest实现测试用例执行

    Python基于unittest实现测试用例执行

    这篇文章主要介绍了Python基于unittest实现测试用例执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 王纯业的Python学习笔记 下载

    王纯业的Python学习笔记 下载

    这篇文章主要介绍了王纯业的Python学习笔记 下载
    2007-02-02
  • 基于Python实现m3u8视频下载

    基于Python实现m3u8视频下载

    m3u8 是一种基于文本的媒体播放列表文件格式,通常用于指定流媒体播放器播放在线媒体流,本文将利用Python实现m3u8视频下载器,感兴趣的可以了解一下
    2023-05-05
  • python 名称空间与作用域详情

    python 名称空间与作用域详情

    这篇文章主要介绍了python 名称空间与作用域详情,函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。

    2021-10-10
  • python中partial()基础用法说明

    python中partial()基础用法说明

    这篇文章主要给大家介绍了关于python中partial()基础用法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-12-12

最新评论