开发者

What does raise in Python raise?

Consider the following code:

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

This will raise Exception: a. I expected it to raise Exception: b (need I expl开发者_如何学运维ain why?). Why does the final raise raise the original exception rather than (what I thought) was the last exception raised?


Raise is re-raising the last exception you caught, not the last exception you raised

(reposted from comments for clarity)


On python2.6

I guess, you are expecting the finally block to be tied with the "try" block where you raise the exception "B". The finally block is attached to the first "try" block.

If you added an except block in the inner try block, then the finally block will raise exception B.

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

Output:

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

Another variation that explains whats happening here

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

Output:

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

If you see here, replacing the finally block with except does raise the exception B.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜