代码之家  ›  专栏  ›  技术社区  ›  Charles Anderson

Python中BaseException的子分类问题

  •  6
  • Charles Anderson  · 技术社区  · 16 年前

    我想创建自己的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 回复  |  直到 16 年前
        1
  •  10
  •   user3850 user3850    16 年前

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

    BaseException.__init__(self, mess)
    

    引自 tutorial :

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

    the documentation ,

    所有内置的、非系统退出的异常都派生自此类。所有用户定义的异常也应派生自[ Exception ].

    所以你不应该继承他的遗产 BaseException

        2
  •  6
  •   Tony Arkles    16 年前

    霍普说得对。