Python,在没有参数的情况下发起异常

Fab*_*els 12 python arguments exception raise

我想知道关于在没有参数的情况下引发异常的最佳实践.在官方python文档中,您可以看到:

try:
    raise KeyboardInterrupt
Run Code Online (Sandbox Code Playgroud)

(http://docs.python.org/tutorial/errors.html第8.6章)

在一些不同的代码中,比如Django或Google代码,你可以看到:

  def AuthenticateAndRun(self, username, password, args):
    raise NotImplementedError()
Run Code Online (Sandbox Code Playgroud)

(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)

在没有参数的情况下,异常是在被提升之前实例化的.没有参数实例化异常的目的是什么?什么时候应该使用第一种情况或第二种情况?

在此先感谢Fabien

and*_*and 5

您可以使用任何您喜欢的形式。没有真正的区别,两者在 Python 2 和 3 中都是合法的。Python 风格指南没有指定推荐哪一个。


关于“类形式”支持的更多信息:

try:
    raise KeyboardInterrupt
Run Code Online (Sandbox Code Playgroud)

这种形式在 Python 2 和 3 中都是完全合法的。摘自pep-3109

raise EXCEPTION 用于引发新的异常。这种形式有两个子变体: EXCEPTION 可能是一个异常类或一个异常类的实例;有效的异常类是 BaseException 及其子类 [5]。如果 EXCEPTION 是一个子类,它将在不带参数的情况下被调用以获取异常实例。

它也在Python 文档中进行了描述:

... 如果是类,则在需要时通过实例化不带参数的类来获取异常实例。


Ign*_*ams 2

引发异常类而不是异常实例是不推荐使用的语法,不应在新代码中使用。

raise Exception, "This is not how to raise an exception..."
Run Code Online (Sandbox Code Playgroud)

  • 我无法弄清楚你在推荐什么。您的代码示例似乎是**不**要做的事情。也许你应该展示“应该”做什么。 (8认同)