Python自定义异常打印输出结果与预期不符问题咨询
运行结果
代码实际输出为 ex。
逻辑拆解
Python所有内置异常的打印输出,本质是调用异常类的__str__方法,而该方法的默认实现完全依赖实例的args属性:
- 当
args元组只有1个元素时,直接返回该元素的字符串形式 - 当
args有多个元素时,返回整个元组的字符串形式
你给出的自定义异常类的两行初始化代码作用如下:
Exception.__init__(self, msg+msg):调用父类Exception的构造方法,父类会自动把传入的'exex'赋值给self.args,此时self.args = ('exex',),如果没有后续修改,打印异常的输出就是exexself.args=(msg,):手动覆盖重写了args属性,把父类设置的('exex',)替换为('ex',),这是决定最终输出的核心代码,完全不可忽略
验证方法
你可以注释掉self.args=(msg,)这行后重新运行,输出就会变为你最初预期的exex。
内容的提问来源于stack exchange,提问作者Harald
相关产品推荐
相关产品推荐

