定义无参数例外:
class myException(Exception):
pass
提出时,之间有什么区别:
raise myException
和
raise myException()
尝试时,我找不到 - 这只是一个重载的语法吗?
答案 0 :(得分:57)
简短的回答是raise MyException
和raise MyException()
都做同样的事情。第一个表单auto实例化你的异常。
relevant section from the docs说,“ raise 将第一个表达式计算为异常对象。它必须是子类或BaseException的实例。如果是类,则为异常实例将在需要时通过实例化没有参数的类来获得。“
那就是说,即使语义相同,第一种形式在显微镜下更快,第二种形式更灵活(因为如果需要你可以传递参数)。
大多数人在Python中使用的常用样式(即在标准库,流行应用程序和许多书籍中)是在没有参数时使用raise MyException
。只有在需要传递一些参数时,人们才会直接实例化异常。例如:raise KeyError(badkey)
。
答案 1 :(得分:6)
查看文档6.9. The raise statement中的raise关键字 它正在创建myException的实例
答案 2 :(得分:1)
是的,ValueError
和ValueError()
之间有区别
ValueError
是一个类,而ValueError()
是一个方法。这就是type(ValueError) is type
和type(ValueError()) is ValueError
raise
的唯一目的是引发异常
当我们使用
ValueError
时,将调用类,该类依次运行构造函数ValueError()
当我们使用
ValueError()
时,将直接调用方法ValueError()
。
注意:raise ValueError # shorthand for 'raise ValueError()'