定义无参数异常:
class MyException(Exception):
pass
举起时,它们之间是否有任何区别:
raise MyException
和
raise MyException()
我找不到任何东西。它仅仅是一个重载的语法吗?
最佳答案
简短的答案是raise MyException
和raise MyException()
都做相同的事情。第一种形式会自动实例化您的异常。
relevant section from the docs说:“raise将第一个表达式评估为异常对象。它必须是BaseException的子类或实例。如果是类,则需要时通过实例化无参数的类来获取异常实例。”
也就是说,即使语义相同,第一种形式在微观上也更快,而第二种形式则更灵活(因为如果需要,可以将其传递给参数)。
大多数人在Python中使用的常用样式(即在标准库,流行应用程序和许多书中)是在没有参数的情况下使用raise MyException
。人们仅在需要传递一些参数时才直接实例化异常。例如:raise KeyError(badkey)
。