在没有PyLint抱怨的情况下在Python中定义异常的"正确"方法

EMP*_*EMP 25 python exception

我试图在Python 2.6中定义我自己的(非常简单的)异常类,但无论我怎么做,我都会收到一些警告.

首先,最简单的方法:

class MyException(Exception):
    pass
Run Code Online (Sandbox Code Playgroud)

这有效,但在运行时打印出警告:DeprecationWarning:BaseException.message自Python 2.6起已被弃用,所以不是这样.然后我尝试了:

class MyException(Exception):
    def __init__(self, message):
        self.message = message
Run Code Online (Sandbox Code Playgroud)

这也有效,但PyLint报告了一个警告:W0231: MyException.__init__: __init__ method from base class 'Exception' is not called.所以我试着说:

class MyException(Exception):
    def __init__(self, message):
        super(Exception, self).__init__(message)
        self.message = message
Run Code Online (Sandbox Code Playgroud)

这也有效!但现在PyLint报告错误:E1003: MyException.__init__: Bad first argument 'Exception' given to super class

我该怎么做这么简单的事情没有任何警告?

Dus*_*tin 36

调用时super,需要子类/派生类作为第一个参数,而不是main/base类.

从Python在线文档:

class C(B):
    def method(self, arg):
        super(C, self).method(arg)
Run Code Online (Sandbox Code Playgroud)

所以你的例外定义如下:

class MyException(Exception):
    def __init__(self, message):
        super(MyException, self).__init__(message)
        self.message = message
Run Code Online (Sandbox Code Playgroud)


EMP*_*EMP 7

好吧,我想我弄明白了.这似乎让PyLint感到高兴:

class MyException(Exception):
    def __init__(self, message):
        Exception.__init__(self, message)
        self.message = message
Run Code Online (Sandbox Code Playgroud)