Python,不带参数引发异常
我想知道在没有参数的情况下引发异常的最佳实践。 在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 )
在没有参数的情况下,异常会在引发之前实例化。 实例化不带参数的异常的目的是什么?我什么时候应该使用第一种情况或第二种情况?
提前致谢 法比安
I would like to know the best practice about raising an exception without arguments.
In the official python documentation, you can see this :
try:
raise KeyboardInterrupt
(http://docs.python.org/tutorial/errors.html chap. 8.6)
and in some differents code, like Django or Google code, you can see this :
def AuthenticateAndRun(self, username, password, args):
raise NotImplementedError()
(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)
The exception is instanciate before being raised while there is no argument.
What is the purpose to instanciate an exception without arguments ? When I should use the first case or the second case ?
Thanks in advance
Fabien
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用任何您喜欢的形式。没有真正的区别,并且在 Python 2 和 3 中都是合法的。 Python 风格指南 没有具体说明推荐哪一种。
关于“类形式”支持的更多信息:
这种形式在 Python 2 和 3 中都是完全合法的。
摘自 pep-3109:
Python 文档:
You can use whichever form you like. There is no real difference and both are legal in Python 2 and 3. Python style guide does not specify which one is recommended.
A little more information on the "class form" support:
This form is perfectly legal in both Python 2 and 3.
Excerpt from pep-3109:
It is also described in Python documentation:
引发异常类而不是异常实例是不推荐使用的语法,不应在新代码中使用。
Raising an exception class instead of an exception instance is deprecated syntax and should not be used in new code.
在 C++ 等语言中,您可以引发任何对象,而不仅仅是异常。 Python 受到更多限制。如果你尝试:
你会得到:
在Python编程模型中,你通常可以单独使用类而不是实例(这对于快速创建唯一实例很方便,只需定义一个类)。因此,难怪您可以引发异常类而不是异常实例。
然而,正如伊格纳西奥所说,这已被弃用。
另外,一些旁注不是直接问题:
您还可以在某些代码中单独看到 raise 本身。没有任何对象类或任何东西。它在异常处理程序中用于重新引发当前异常并保留初始回溯。
In languages like C++ you can raise any object, not just Exceptions. Python is more constrained. If you try :
You get:
In python programming model you can usually use a class by itself instead of an instance (this is handy for fast creation of unique instances, just define a class). Hence no wonder you can raise an exception class instead of an exception instance.
However like Ignacio said, that is deprecated.
Also, some side-note that is not the direct question:
You could also see raise alone by itself in some code. Without any object class or anything. It is used in exception handlers to re-raise the current exception and will keep the initial traceback.