gpt4 book ai didi

python - 使用 Exception.__init__(self) 来处理用户定义的异常

转载 作者:行者123 更新时间:2023-12-01 00:46:58 25 4
gpt4 key购买 nike

我一直在网上搜索了解 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__

他们都在做类似的事情。我无法理解其中的区别。

最佳答案

更正确的语法是 Python3 的 super().__init__() 或 Python2 的 super(MyFirstError, self).__init__()

您通常在子类中重写__init__() 时执行此操作,并且还需要调用基类构造函数。在您的特定情况下,调用不带参数的基本 Exception 构造函数没有任何好处,因为它没有做任何花哨的事情,但您可能希望将 结果 传递给 Exception 构造函数,这样您就不必将 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) 方法,以实现与上面完全相同的结果。

关于python - 使用 Exception.__init__(self) 来处理用户定义的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56900247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com