2016-08-09 17 views
8

所以我在Python简单的自定义错误类,我创建基于Python 2.7的文档:在python的自定义错误类中调用超级的要点是什么?

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方法的自定义错误类的开头,所以我的问题是:这样做实际上是为了一个目的吗?只是人们试图安抚虚假警告?

回答

10

这是一个有效的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) 

这是一个更好的方式来做到这一点,因为implementation for BaseException.__str__只考虑“ARGS”元组,它不会在消息看所有。在旧的实现中,print InvalidTeamError()只会打印一个空字符串,这可能不是您想要的!

+0

巨大的拇指链接到C实现。马上清楚,发生了什么! – timmwagener

相关问题