当前位置: 首页 > 面试题库 >

没有括号的“ raise exception()”和“ raise exception”之间有区别吗?

章承
2023-03-14
问题内容

定义无参数异常:

class MyException(Exception):
    pass

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

raise MyException

raise MyException()

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


问题答案:

简短的回答是,无论raise MyExceptionraise MyException()做同样的事情。第一种形式会自动实例化您的异常。

docs的相关部分说:“ raise
将第一个表达式评估为异常对象。它必须是BaseException的子类或实例。如果是类,则在需要时通过使用实例化该类来获取异常实例。没有争论。”

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

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



 类似资料:
  • 问题内容: 它们都有效吗?是出于某些原因而首选? 问题答案: 方括号是列表,括号是元组。 列表是可变的,这意味着您可以更改其内容: 而元组不是: 另一个主要区别是,元组是可哈希的,这意味着您可以将其用作字典的键。例如: 请注意,正如许多人指出的那样,您可以将元组加在一起。例如: 但是, 这并不意味着元组是可变的 。在上面的示例中,通过将两个元组加在一起作为参数来构造 新的 元组。原始元组未修改。为

  • 问题内容: 我对以下代码行的语法感到困惑: 数据框对象由2列(“大脑”和“身体”)组成 当我打印x_values时,我得到这样的东西: 就dataframe对象的属性和方法而言,我知道pandas文档,但双括号语法使我感到困惑。 问题答案: 考虑一下: 来源DF: 选择一列-生成Pandas.Series: 选择DataFrame的子集-结果为DataFrame: 结论: 第二种方法允许我们从Da

  • 这里我理解哈希(#)符号将定义为本地模板变量,但是前面的星号是什么意思呢?还有,有必要吗? 下面是使用括号的示例: 我有点理解周围的括号将它绑定到HTML属性/Angular指令。这是否意味着它们是Angular计算表达式的指针?就像是Angular 1中的的等价物? 我猜真正的问题是,这些符号在Angular 2中有特殊的含义吗,知道何时使用每一个的最简单的方法是什么?谢谢!!

  • 问题内容: Python 3.x之间存在实质性区别: 和 我的问题不是上面的用法所独有,而是更笼统或必不可少的- 即使结果是相同的,这种语法差异是否以不同的方式起作用?有逻辑上的区别吗?有没有一项任务更合适,或者仅仅是风格上的差异?如果这仅仅是样式,那么Python程序员会认为哪一种更清洁? 另外,以上是否是询问和之间有什么区别的相反实例?前者是否像后者一样,在对象标识和对象值相等方面有所不同?在

  • 问题内容: 我来自Javascript背景(可以同时通过属性和符号访问属性),所以请原谅我,但是Python中两者之间的区别到底是什么? 从我的实验它seeems认为应始终使用,既得到的索引或并从在某个键中获得的价值。这是否正确?如果不正确,什么时候在Python中使用? 问题答案: 点运算符用于访问任何对象的属性。例如,复数 具有(其中包括)两个属性和: 除此以外,它还有一个方法,它也是一个属性

  • 问题内容: 我的Google-fu使我失败了。 在Python中,以下两个相等测试是否等效? 这是否适用于您要比较实例(list说)的对象? 好的,这样可以回答我的问题: 因此,==测试重视在哪里is进行测试以查看它们是否是同一对象? 问题答案: 如果两个变量指向同一个对象(如果变量引用的对象相等),则将返回。 在您的情况下,第二个测试仅能工作,因为Python会缓存小的整数对象,这是实现细节。对