【问题标题】:Raising custom exceptions and output引发自定义异常和输出
【发布时间】:2021-10-02 17:26:22
【问题描述】:

我有以下教程中的代码:

class Ex(Exception):
    def __init__(self,msg):
        Exception.__init__(self,msg+msg)
        self.args=(msg,)


try:
    raise Ex('ex')
except Ex as e:
    print(e)

问题是输出会是什么?我以为是exex。但是,输出为ex。现在我不了解构造。据我所知,我可以忽略self.args=(msg,)。这没关系。我不明白的是Exception.__init__(self,msg+msg) 这一行。我不习惯例外。

【问题讨论】:

  • 如果你认为self.args=(msg,) 无关紧要,为什么会出现呢?
  • 您的自定义异常类看起来像从其他类继承的任何其他类。这正是我希望看到的。你不明白的那一行是什么?
  • 我不明白 msg+msg 的作用。所以我从超类 Exception 中调用 init 并交出 self 和 msg+msg。这是谁做的,交出味精+味精?那么 Exception.__init__(self,msg+msg) 又做了什么?当我删除 self-args 然后 msg+msg 是输出。我不明白这种方式。

标签: python exception


【解决方案1】:

当调用Exception.__init__(self,msg+msg) 时,msg+msg(在这种情况下,exex 存储在args 属性中。之后通过执行self.args=(msg,),您将覆盖args 属性的先前分配。如果您想要打印exex 而不仅仅是ex,只需删除self.args=(msg,)

【讨论】:

  • 感谢您的回答。但是,我不明白self.args。当我将其更改为 self.test 然后 exex 是输出。这是什么参数?
  • 请查看python documentation"如果在此类的实例上调用str(),则返回实例的参数表示,或者为空没有参数时的字符串。” print() 在它的所有参数上调用 str()。传递给Exception.__init__() 的所有参数(self 除外)都存储在异常的.args 属性中。当在异常上调用str() 时,它将返回存储在.args 属性中的所有参数。
  • 通过执行self.args=(msg,),您将覆盖.args 属性,打印的表示将是您设置.args 属性的内容。在执行self.test=(msg,) 时,您不会覆盖.args 属性,因此不会更改打印输出的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多