0

以下有区别吗?

try:
    <some code>
except SomeException as err:
    raise err

try:
    <some code>
except SomeException:
    raise
4

3 回答 3

4

第一个从再次引发异常的点重写异常的堆栈跟踪,因此它显示为已在 line 处引发raise err。第二个单独留下堆栈跟踪,因此它显示为已在<some code>.

于 2013-10-17T23:40:34.237 回答
0

根据文档,单独使用该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
于 2013-10-17T23:39:49.453 回答
0

是的。except SomeException as err然后将让您调用该异常对象的函数,如本教程片段所示:

except IOError as e:
  print "I/O error({0}): {1}".format(e.errno, e.strerror)

然后,您可以在任一片段中重新加注。

于 2013-10-17T23:40:02.987 回答