在Python中定义异常而不让PyLint报错的“正确”方式
我想在Python 2.6中定义一个自己的(非常简单的)异常类,但无论我怎么做,总是会收到一些警告。
首先,最简单的方法是:
class MyException(Exception):
pass
这个方法可以用,但在运行时会打印出一个警告:弃用警告:BaseException.message在Python 2.6中已被弃用。好吧,这显然不是正确的方法。接着我尝试了:
class MyException(Exception):
def __init__(self, message):
self.message = message
这个方法也可以用,但PyLint报告了一个警告:W0231: MyException.__init__: 基类'Exception'的__init__方法没有被调用
。所以我尝试调用它:
class MyException(Exception):
def __init__(self, message):
super(Exception, self).__init__(message)
self.message = message
这个方法也可以!但现在PyLint报告了一个错误:E1003: MyException.__init__: 给超类的第一个参数'Exception'不正确
我到底该怎么做才能做到这么简单的事情而没有任何警告呢?
3 个回答
0
你第一种方法应该是可以的。我自己在使用Python 2.6.5的时候也经常用这个方法。不过,我不使用“message”这个属性;也许这就是你在第一个例子中收到运行时警告的原因。
比如下面这段代码,运行起来没有任何错误或运行时警告:
class MyException(Exception):
pass
def thrower():
error_value = 3
raise MyException("My message", error_value)
return 4
def catcher():
try:
print thrower()
except MyException as (message, error_value):
print message, "error value:", error_value
结果是:
>>> catcher()
My message error value: 3
我不确定PyLint对上面的代码会不会有问题。
7
好的,我想我搞明白了。这段代码似乎能让PyLint满意:
class MyException(Exception):
def __init__(self, message):
Exception.__init__(self, message)
self.message = message
45
当你使用 super
的时候,第一参数应该是子类,而不是父类。
这是来自Python在线文档的内容:
class C(B):
def method(self, arg):
super(C, self).method(arg)
所以你的异常应该这样定义:
class MyException(Exception):
def __init__(self, message):
super(MyException, self).__init__(message)
self.message = message