请解释一下这段Python代码
我刚开始学习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"
不过,如果 B
、C
或 D
其中任何一个不是异常的话,它会抛出一个(未捕获的)异常。
2
我猜这里的raise()是直接放在try:里面,主要是为了举例说明。其实通常情况下,你会把可能会出错的代码(也就是包含raise()的那部分)放在try里面,对吧?
2
raise
是用来抛出异常的方式。简单来说,如果在处理异常的地方单独使用 raise
,它只是把这个异常传递给外部的处理程序。