定义无参数异常:
class MyException(Exception):
pass
提出时,两者之间是否有任何区别:
raise MyException
和
raise MyException()
我找不到任何东西;它只是一个重载的语法吗?
简短的回答是两者都raise MyException
做raise MyException()
同样的事情。第一种形式自动实例化您的异常。
文档中的相关部分说:
raise将第一个表达式计算为异常对象。它必须是 BaseException 的子类或实例。如果是类,则在需要时通过实例化不带参数的类来获取异常实例。
也就是说,即使语义相同,第一种形式在微观上更快,第二种形式更灵活(因为如果需要你可以传递参数)。
大多数人在 Python 中(即在标准库、流行应用程序和许多书籍中)使用的通常样式是在raise MyException
没有参数时使用。人们只有在需要传递一些参数时才直接实例化异常。例如: raise KeyError(badkey)
。
ValueError
是的,和之间有区别ValueError()
ValueError
是一个类,而ValueError()
创建一个类的实例。这就是原因type(ValueError) is type
和type(ValueError()) is ValueError
的唯一目的raise
是引发异常,
当我们使用时
ValueError
,类将被调用,然后运行构造函数ValueError()
当我们使用 时,直接调用
ValueError()
该方法。ValueError()
笔记:raise ValueError # shorthand for 'raise ValueError()'