问题:没有括号的“ raise exception()”和“ raise exception”之间有区别吗?
定义无参数异常:
class MyException(Exception):
pass
举起时,它们之间是否有任何区别:
raise MyException
和
raise MyException()
我找不到任何东西。它仅仅是一个重载的语法吗?
回答 0
简短的回答是,无论raise MyException
和raise MyException()
做同样的事情。第一种形式会自动实例化您的异常。
docs的相关部分说:“ 抬高将第一个表达式评估为异常对象。它必须是BaseException的子类或实例。如果是类,则在需要时通过使用实例化该类来获取异常实例。没有参数。”
也就是说,即使语义相同,第一种形式在微观上也更快,而第二种形式则更灵活(因为如果需要,可以将其传递给参数)。
大多数人在Python中(即在标准库,流行的应用程序和许多书中)使用的通常样式是在raise MyException
没有参数的情况下使用。人们仅在需要传递一些参数时才直接实例化异常。例如: raise KeyError(badkey)
。
回答 1
回答 2
是的,ValueError
和之间有区别ValueError()
ValueError
是一个类,而ValueError()
创建一个类的实例。这就是原因type(ValueError) is type
和type(ValueError()) is ValueError
的唯一目的raise
是引发异常,
当我们使用时
ValueError
,将调用class,该class依次运行构造函数ValueError()
当我们使用时
ValueError()
,该方法ValueError()
被直接调用。
注意: raise ValueError # shorthand for 'raise ValueError()'
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。