Python中提升的内容是什么?

时间:2010-10-14 17:00:04

标签: python exception

请考虑以下代码:

try:
    raise Exception("a")
except:
    try:
        raise Exception("b")
    finally:
        raise

这会引发Exception: a。我希望它能提升Exception: b(我需要解释原因吗?)。为什么最终raise提出原始异常而不是(我认为)是最后一个例外?

2 个答案:

答案 0 :(得分:26)

  

Raise正在重新引发你抓到的最后一个异常,而不是你提出的最后一个异常

(为了清晰起见,从评论转发)

答案 1 :(得分:15)

在python2.6上

我猜,你期望finally块与“try”块绑在一起,你可以在其中引发异常“B”。 finally块附加到第一个“try”块。

如果在内部try块中添加了except块,则finally块将引发异常B。

try:
  raise Exception("a")
except:
  try:
    raise Exception("b")
  except:
    pass
  finally:
    raise

输出:

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    raise Exception("b")
Exception: b

解释此处发生的另一种变体

try:
  raise Exception("a")
except:
  try:
    raise Exception("b")
  except:
    raise

输出:

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    raise Exception("b")
Exception: b

如果你看到这里,用except替换finally块会引发异常B.