我想知道关于在没有参数的情况下引发异常的最佳实践。 在官方python文档中,您可以看到:
try:
raise KeyboardInterrupt
(http://docs.python.org/tutorial/errors.html第8.6章)
在某些不同的代码中,比如Django或Google代码,您可以看到:
def AuthenticateAndRun(self, username, password, args):
raise NotImplementedError()
(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)
异常是在没有参数的情况下被提升之前发生的异常。 没有参数实例化异常的目的是什么?当我应该使用第一种情况或第二种情况时?
提前致谢 法比安
答案 0 :(得分:4)
您可以使用您喜欢的任何形式。没有真正的区别,并且在Python 2和3中都是合法的。Python style guide没有指定推荐哪一个。
关于“课堂形式”支持的更多信息:
try:
raise KeyboardInterrupt
这种形式在Python 2和3中都是完全合法的。 摘录自pep-3109:
中也对此进行了描述raise EXCEPTION用于引发新的异常。这个表格有两个 子变体:EXCEPTION可以是异常类或实例 例外类;有效的异常类是BaseException及其 子类[5]。 如果EXCEPTION是子类,则将使用no调用它 获取异常实例的参数。
...如果是类,则在需要时将获取异常实例 通过实例化没有参数的类。
答案 1 :(得分:3)
不推荐使用异常类而不是异常实例语法,不应在新代码中使用。
raise Exception, "This is not how to raise an exception..."
答案 2 :(得分:0)
在像C ++这样的语言中,您可以引发任何对象,而不仅仅是异常。 Python更受限制。如果您尝试:
raise 1
你得到:
Traceback (most recent call last):
...
TypeError: exceptions must be old-style classes or derived from BaseException, not int
在python编程模型中,您通常可以使用一个类而不是一个实例(这对于快速创建唯一实例很方便,只需定义一个类)。因此,难怪您可以引发异常类而不是异常实例。
然而就像伊格纳西奥所说,这已被弃用。
另外,一些侧面说明不是直接的问题:
您还可以在某些代码中单独看到单独提升。没有任何对象类或任何东西。它在异常处理程序中用于重新引发当前异常并保持初始回溯。