问题在Python中对BaseException进行子类化

时间:2008-12-18 17:00:56

标签: python exception inheritance

我想创建自己的Python异常类,如下所示:

class MyException(BaseException):
    def __init__(self, errno, address):
        if errno == 10048:
            mess = str(address) + ' is already in use'
        else:
            mess = 'Unable to open ' + str(address)
        BaseException.__init__(mess)

但是当程序接到BaseException.__init__()的调用时,我得到了这个追溯:

BaseException.__init__(mess)
TypeError: descriptor '__init__' requires a 'exceptions.BaseException' object but received a 'str'

我认为BaseException会接受任何参数集。另外,我应该如何将'exceptions.BaseException'对象传递给exceptions.BaseException的构造函数?

2 个答案:

答案 0 :(得分:10)

您必须使用实例作为第一个参数调用基类的方法:

BaseException.__init__(self, mess)

引用tutorial

  

派生类中的重写方法实际上可能希望扩展而不是简单地替换同名的基类方法。有一种直接调用基类方法的简单方法:只需调用BaseClassName.methodname(self, arguments)即可。这对客户来说偶尔也很有用。 (请注意,这仅在直接在全局范围内定义或导入基类时才有效。)

如Tony Arkles和the documentation所述,

  

所有内置的,非系统退出的异常都是从这个类派生的。所有用户定义的例外也应该来自[Exception]。

所以你不应该继承BaseException,无论如何......

答案 1 :(得分:6)

跳是正确的。

作为旁注,你真的不应该继承BaseException,你应该是子类化Exception。 (除非你真的知道你在做什么)