为自定义异常定义类时,super().__init__() 做什么?

问题描述 投票:0回答:1

我遇到了一段代码,旨在为自定义异常定义一个类。我不明白的是为什么需要调用并启动父Exception类的错误消息,因为我的理解是我们通过定义自定义消息函数来处理消息部分。具体来说,我只是想知道有和没有这行代码的情况会发生什么。

class CustomException(Exception):
    def __init__(self, error_message, error_detail:sys):
        super().__init__(error_message)  # calling the parent class constructor
        self.error_message = error_message_details(error_message,error_detail)
        
    def __str__(self):
        return self.error_message

error_message_details函数如下:

def error_message_details(error, error_detail:sys):
    _,_,exc_tb = error_detail.exc_info()  # gets information about the exception from the interpreter
    file_name = exc_tb.tb_frame.f_code.co_filename
    lineNo = exc_tb.tb_lineno
    error_message = "error occured in script [{0}] on line number [{1}]; error message [{2}]".format(
        file_name,
        lineNo,
        str(error)
    )
    
    return error_message

我尝试运行带有或不带有该行代码的代码,当我省略该行时,错误消息根本没有打印,当我包含该行时,它按预期工作。我只是不明白这是如何工作的。

python-3.x exception
1个回答
0
投票

如果没有 super().init(error_message),CustomException 类将不会使用父 Exception 类的构造函数初始化错误消息。因此,当引发 CustomException 实例并将其转换为字符串时(例如,打印时),默认情况下不会设置错误消息。因此,当您尝试打印异常时,您不会看到任何错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.