定义无参数异常:

class MyException(Exception):
    pass

举起时,它们之间是否有任何区别:
raise MyException


raise MyException()

我找不到任何东西。它仅仅是一个重载的语法吗?

最佳答案

简短的答案是raise MyExceptionraise MyException()都做相同的事情。第一种形式会自动实例化您的异常。

relevant section from the docs说:“raise将第一个表达式评估为异常对象。它必须是BaseException的子类或实例。如果是类,则需要时通过实例化无参数的类来获取异常实例。”

也就是说,即使语义相同,第一种形式在微观上也更快,而第二种形式则更灵活(因为如果需要,可以将其传递给参数)。

大多数人在Python中使用的常用样式(即在标准库,流行应用程序和许多书中)是在没有参数的情况下使用raise MyException。人们仅在需要传递一些参数时才直接实例化异常。例如:raise KeyError(badkey)

10-05 22:44
查看更多