自定义Python的异常类

2019年9月19日 / 27次阅读 / Last Modified 2019年9月19日
语法

异常处理是程序中很重要的一个要素,老程序员都知道,其实一个软件内大部分代码,都是在处理各种可能的异常。Python内置了很多异常类,我们可以直接拿来使用,也可以自定义自己的异常类,满足自己软件的需要。

自定义异常类

class ReplyError(Exception):
    """Exception for receiving wrong reply"""

    def __init__(self, msg=None):
        self.msg = msg

    def __str__(self):
        return str(self.msg)

    def __repr__(self):
        return 'ReplyError('+str(self.msg)+')'

以上代码,从Exception类继承一个自定义异常类ReplyError。一般都是从Exception类继承,这是Python常规错误的基类。Python中所有异常类的积累,是BaseException。

我们自定义的这个ReplyError,实现了3个函数,__init__初始化,__str__用于str()函数,__repr__用于repr()函数。请参考str与repr函数的区别

这样就算完成了自定义异常类,在代码中,就可以直接使用ReplyError了。

>>> try:
...     raise ReplyError('test customized exception class')
... except ReplyError as e:
...     print(str(e))
...     print(repr(e))
...
test customized exception class
ReplyError(test customized exception class)

raise语句

raise语句用于抛出一个异常,对于代码执行来说,执行到raise语句,抛出异常,raise后面的语句就不会再被执行了,效果等同于return。

我这两天还在琢磨一个这样的细节,什么样的函数需要抛出异常,什么样的函数需要返回True或False?这个问题每个人的答案都不一样,跟自己的代码风格有关系,我个人倾向于,对于简单的非此即彼的情况,就是返回True或False,对于复杂的情况,对于需要获取返回值的情况,考虑使用异常,这样代码的可读性会更好。

-- EOF --

本文链接:https://www.pynote.net/archives/1167

留言区

《自定义Python的异常类》有1条留言

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰

    Python的异常处理能力是很强大的,它有很多内置异常,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。BaseException是所有内置异常的基类,但用户定义的类并不直接继承BaseException,所有的异常类都是从Exception继承,且都在exceptions模块中定义。 [回复]


前一篇:
后一篇:

More

麦新杰的Python笔记

Ctrl+D 收藏本页


©Copyright 麦新杰 Since 2019 Python笔记

go to top