以下是否有区别?提高命名和未命名例外的区别
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
以下是否有区别?提高命名和未命名例外的区别
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
第一个从再次提升的点重新写入异常的堆栈跟踪,因此它显示在行raise err
处已经被提出。第二个单独离开堆栈跟踪,所以它显示在<some code>
的某个地方被提出。
According to the documentation,利用自身的raise
声明只是重新引发的最后一个异常的是,在目前的范围是积极的。 raise err
解析err[, None, None]
并确定需要提高err
。
这意味着第一个版本(raise err
)会给raise err
行作为堆栈跟踪的基础。裸声raise
声明熄灭并重新引发最后一个错误而不触及它,这将保留原始堆栈跟踪。
# raise err
Traceback (most recent call last):
File "foo.py", line 4, in <module>
raise err
Exception: bar
# raise
Traceback (most recent call last):
File "foo.py", line 2, in <module>
raise Exception('bar')
Exception: bar
是的。 except SomeException as err
会让那么你在那个异常对象的函数调用,如本教程的代码片段显示:
except IOError as e: print "I/O error({0}): {1}".format(e.errno, e.strerror)
然后,您可以再次加注其在任一片段。
请注意,区别在于'raise'语句,而不是'except'语句。即使你已经完成了'SomeException as err:',你仍然可以使用“anonymous”'raise'来传递异常。 – abarnert