“exception()”和“引发exception”没有括号有区别吗?

定义一个无参数的exception:

class myException(Exception): pass 

当提出时,有什么区别:

 raise myException 

 raise myException() 

尝试时,我可以find没有 – 它只是一个重载语法?

简单的回答是, raise MyExceptionraise MyException()做同样的事情。 这第一个表单自动实例化你的exception。

文档中的相关部分表示:“ raise作为exception对象评估第一个expression式,它必须是一个子类或一个BaseException的实例,如果它是一个类,则需要时通过实例化类来获得exception实例没有论据“。

也就是说,即使语义相同,第一种forms在显微镜下速度更快,第二种forms更灵活(因为如果需要,可以传递参数)。

大多数人在Python中使用的通常风格(即在标准库,stream行应用程序和许多书中)是在没有参数的情况下使用raise MyException 。 当有些参数需要传递时,人们只是直接实例化exception。 例如: raise KeyError(badkey)

请查看文档6.9中的raise关键字。 提高声明
它正在创build一个myException的实例