请解释一下这段Python代码

2 投票
3 回答
640 浏览
提问于 2025-04-17 06:16

我刚开始学习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 个回答

1

这段代码有点奇怪,用一种很不寻常的方式来处理事情,但其实它的逻辑还是挺清楚的。这里的列表 [B, C, D] 是一组异常类型。因为这个异常是在 try 块里被 raise 抛出的,所以它会立刻被相应的 except 处理器处理,依次是 except B:except C:except D:

所以,这段代码其实可以看作是:

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

不过,如果 BCD 其中任何一个不是异常的话,它会抛出一个(未捕获的)异常。

2

我猜这里的raise()是直接放在try:里面,主要是为了举例说明。其实通常情况下,你会把可能会出错的代码(也就是包含raise()的那部分)放在try里面,对吧?

2

raise 是用来抛出异常的方式。简单来说,如果在处理异常的地方单独使用 raise,它只是把这个异常传递给外部的处理程序。

撰写回答