异常的使用。\uuu init(self)用于用户定义的异常

2024-09-28 01:29:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在网上搜索了解Exception.__init__(self)对于用户定义的异常的用法。你知道吗

例如:

我有两个用户定义的异常,一个是Exception.__init__(self),另一个没有。你知道吗

class MyFirstError(Exception):
    def __init__(self, result):
        Exception.__init__(self)
        self.result = result

class MySecondError(Exception):
    def __init__(self, result):
        self.result = result

def test():
    try:
        raise MyFirstError("__My First Error__")
    except MyFirstError as exc:
        return exc.result

def test2():
    try:
        raise MySecondError("__ My Second Error__")
    except MySecondError as exc:
        return exc.result

if __name__ == "__main__":
    print(test())
    print(test2())

输出:

__My First Error__
__ My Second Error__

他们两个都在做相似的事情。我不明白其中的区别。你知道吗


Tags: 用户testself定义initmydefexception
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:14

更正确的语法是super().__init__()对于Python3或super(MyFirstError, self).__init__()对于Python2。你知道吗

通常在重写子类中的__init__()并需要调用基类构造函数时执行此操作。在您的特定情况下,调用没有参数的基异常构造函数没有任何好处,因为它不会做任何花哨的事情,但是您可能希望将result传递给异常构造函数,这样您就不必将self.result自己保存在子类中。你知道吗

示例:

class MyFirstError(Exception):
    def __init__(self, result):
        super().__init__(result)  # will pass result as an argument to the base Exception class

不过,同样的事情也可以用更短的方式来完成:

class MyFirstError(Exception): pass

由于不实现构造函数,将隐式调用基异常的__init__(result)方法,从而获得与上述完全相同的结果。你知道吗

相关问题 更多 >

    热门问题