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

Rac*_*son 12 python exception pylint python-2.7

所以我在Python中有一个基于Python 2.7文档创建的简单自定义错误类:

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

这让我W0231: __init__ method from base class %r is not called在PyLint中发出警告,所以我去查阅它并给出了"需要解释"的非常有用的描述.我通常只是忽略这个错误,但是我注意到在线代码包含了一个在自定义错误类的init方法开头调用super的问题,所以我的问题是:这样做是否真的有用,或者只是人试图安抚伪造的幽灵警告?

wim*_*wim 15

这是一个有效的pylint警告:通过不使用超类,__init__您可能会错过父类中的实现更改.事实上,你有 - 因为BaseException.message从Python 2.6开始就被弃用了.

这将是一个实现,它将避免您的警告W0231,并将避免python关于该message属性的弃用警告.

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

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