当前位置:首页 > python > 正文

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


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

这篇文章主要介绍了详解在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  

标签:
上一篇: 下一篇:

暂无评论

发表评论

不理你。 不要啊! 吃饭。 吃惊。 吃西瓜。 飞吻! 恭喜! Hi 纠结! 膜拜! OK 抛媚眼。 泡泡糖。 抛钱。 忍! 生闷气! 调皮。 偷看。 委屈。 献花。 疑问? 抓狂!

小提示:Ctrl+Enter快速提交助您一臂之力~
加载中……