我一直在网上搜索了解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__
他们两个都在做相似的事情。我不明白其中的区别。你知道吗
更正确的语法是
super().__init__()
对于Python3或super(MyFirstError, self).__init__()
对于Python2。你知道吗通常在重写子类中的
__init__()
并需要调用基类构造函数时执行此操作。在您的特定情况下,调用没有参数的基异常构造函数没有任何好处,因为它不会做任何花哨的事情,但是您可能希望将result
传递给异常构造函数,这样您就不必将self.result
自己保存在子类中。你知道吗示例:
不过,同样的事情也可以用更短的方式来完成:
由于不实现构造函数,将隐式调用基异常的
__init__(result)
方法,从而获得与上述完全相同的结果。你知道吗相关问题 更多 >
编程相关推荐