定义无参数异常:
class MyException(Exception):
pass在引发时,是否有任何区别:
raise MyException和
raise MyException()我找不到它;它仅仅是一个重载的语法吗?
发布于 2013-05-23 16:36:34
简而言之,raise MyException和raise MyException()都做同样的事情。第一个表单自动实例化您的异常。
relevant section from the docs说:
raise将第一个表达式作为异常对象求值。它必须是BaseException的子类或实例。如果是类,则会在需要时通过不带参数的实例化类来获取异常实例。
也就是说,尽管语义相同,但第一种形式在微观上更快,第二种形式更灵活(因为如果需要,您可以向它传递参数)。
大多数人在Python中(即在标准库、流行应用程序和许多书籍中)使用的常见风格是在没有参数的情况下使用raise MyException。只有当需要传递一些参数时,人们才会直接实例化异常。例如:raise KeyError(badkey)。
发布于 2013-05-23 14:34:35
去看看the docs for the raise statement吧。它正在创建MyException的一个实例。
发布于 2018-12-30 23:58:37
是的,ValueError和ValueError()是有区别的
ValueError是一个类,而ValueError()创建一个类的实例。这就是type(ValueError) is type和type(ValueError()) is ValueError
raise的唯一目的是引发异常,
当我们使用
ValueError时,类将被调用,而该类又运行构造函数ValueError()
当我们使用ValueError()时,ValueError()方法被直接调用。
注:raise ValueError # shorthand for 'raise ValueError()'
https://stackoverflow.com/questions/16706956
复制相似问题