你能否在python中解释这段代码片段

时间:2011-11-14 03:25:42

标签: python exception exception-handling

我是python的新手,需要一些帮助来理解这段代码:

for c in [B, C, D]:
   try:
      raise c()
   except D:
      print "D"
    except C:
      print "C"
    except B:
      print "B"

阅读python文档时,似乎raise()会抛出异常,但我无法弄清楚为什么raise()try块内。不应该是这样的:

try:
    //do something
catch:
    raise()

3 个答案:

答案 0 :(得分:2)

raise是您首先提出异常的方式。异常处理程序中的唯一raise仅将异常传播给外部处理程序。

答案 1 :(得分:2)

我认为raise()直接放在try中:仅用于说明目的。 甚至通常你会把代码导致异常(即一个包含raise())在try中,不是吗?

答案 2 :(得分:1)

这段代码有点荒谬,因为它是一种奇怪的做事方式,但它很清楚发生了什么。列表[B, C, D]是一个例外列表。由于raise块中的异常为try d,因此会立即由相应的except处理程序处理(连续,except B:except C:except D:处理程序。

因此,此代码相当于:

print "B"
print "C"
print "D"

如果BCD中的任何一个不是例外,它将抛出(未捕获)异常。