首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"raise exception()“和"raise exception”有什么区别吗?

"raise exception()“和"raise exception”有什么区别吗?
EN

Stack Overflow用户
提问于 2013-05-23 14:26:12
回答 3查看 11.3K关注 0票数 108

定义无参数异常:

代码语言:javascript
复制
class MyException(Exception):
    pass

在引发时,是否有任何区别:

代码语言:javascript
复制
raise MyException

代码语言:javascript
复制
raise MyException()

我找不到它;它仅仅是一个重载的语法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 16:36:34

简而言之,raise MyExceptionraise MyException()都做同样的事情。第一个表单自动实例化您的异常。

relevant section from the docs说:

raise将第一个表达式作为异常对象求值。它必须是BaseException的子类或实例。如果是类,则会在需要时通过不带参数的实例化类来获取异常实例。

也就是说,尽管语义相同,但第一种形式在微观上更快,第二种形式更灵活(因为如果需要,您可以向它传递参数)。

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

票数 128
EN

Stack Overflow用户

发布于 2013-05-23 14:34:35

去看看the docs for the raise statement吧。它正在创建MyException的一个实例。

票数 4
EN

Stack Overflow用户

发布于 2018-12-30 23:58:37

是的,ValueErrorValueError()是有区别的

ValueError是一个类,而ValueError()创建一个类的实例。这就是type(ValueError) is typetype(ValueError()) is ValueError

raise的唯一目的是引发异常,

当我们使用ValueError时,类将被调用,而该类又运行构造函数ValueError()

当我们使用ValueError()时,ValueError()方法被直接调用。

注:raise ValueError # shorthand for 'raise ValueError()'

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16706956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档