以下是否存在差异?
try:
<some code>
except SomeException as err:
raise err
try:
<some code>
except SomeException:
raise
答案 0 :(得分:4)
第一个从重新引发的点重写异常的堆栈跟踪,因此它显示为已在行raise err
处引发。第二个单独留下堆栈跟踪,因此它显示为已在<some code>
中的某处生成。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
是。 except SomeException as err
将允许您调用该异常对象的函数,如本教程片段所示:
except IOError as e: print "I/O error({0}): {1}".format(e.errno, e.strerror)
然后,您可以在任一代码段中重新加载它。