我遇到了一段代码,旨在为自定义异常定义一个类。我不明白的是为什么需要调用并启动父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
我尝试运行带有或不带有该行代码的代码,当我省略该行时,错误消息根本没有打印,当我包含该行时,它按预期工作。我只是不明白这是如何工作的。
如果没有 super().init(error_message),CustomException 类将不会使用父 Exception 类的构造函数初始化错误消息。因此,当引发 CustomException 实例并将其转换为字符串时(例如,打印时),默认情况下不会设置错误消息。因此,当您尝试打印异常时,您不会看到任何错误消息。