因此,我在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的调用,所以我的问题是:这样做吗实际上是有目的的,还是只是人们试图安抚一个假的派林特警告?在
这是一个有效的pylint警告:如果不使用超类
__init__
,则可能会错过父类中的实现更改。事实上,您已经-因为BaseException.message
在Python2.6中已经被弃用了。在下面的实现将避免警告W0231,并避免python关于
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派生。在
相关问题 更多 >
编程相关推荐