在python的自定义错误类中调用super有什么意义?

2024-10-02 14:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我在Python中有一个简单的自定义错误类,它是根据Python 2.7文档创建的:

class InvalidTeamError(Exception):
    def __init__(self, message='This user belongs to a different team'):
        self.message = message

这在PyLint中给了我警告W0231: __init__ method from base class %r is not called,所以我去查了一下,得到了“需要解释”的非常有用的描述。我通常忽略这个错误,但是我注意到在线的一个ton代码在自定义错误类的init方法的开头包含了对super的调用,所以我的问题是:这样做吗实际上是有目的的,还是只是人们试图安抚一个假的派林特警告?在


Tags: to文档self警告messageinitdef错误
2条回答

这是一个有效的pylint警告:如果不使用超类__init__,则可能会错过父类中的实现更改。事实上,您已经-因为BaseException.message在Python2.6中已经被弃用了。在

下面的实现将避免警告W0231,并避免python关于message属性的不推荐警告。在

class InvalidTeamError(Exception):
    def __init__(self, message='This user belongs to a different team'):
        super(InvalidTeamError, self).__init__(message)

这是一种更好的方法,因为implementation for ^{}只考虑'args'元组,它根本不看消息。使用旧的实现,print InvalidTeamError()只会打印一个空字符串,这可能不是您想要的!在

看看cpython2.7源代码,避免对superinit的调用应该没有问题,是的,这样做只是因为在init中调用基类init通常是一个好的实践。在

https://github.com/python/cpython/blob/master/Objects/exceptions.c关于BaseException init,请参阅第60行,以及第456行异常如何从BaseException派生。在

相关问题 更多 >