当我尝试捕获多个异常时省略括号时会发生什么?

时间:2011-06-20 05:18:12

标签: python exception

我刚试过写这个:

try:
    # do something
except ValueError, IndexError:
    # do something else

当我的程序仍然抛出一个IndexError时,我感到非常困惑,因为我以为我抓住了它。

如果它没有捕获IndexError,这段代码到底是做什么的?它似乎不是语法错误。

2 个答案:

答案 0 :(得分:7)

因为这个错误/问题很常见,所以Python3的语法会发生变化。你的代码等同于

try:
    # do something
except (ValueError, ) as IndexError:
    # do something else

你会看到这显然是错误的。

新语法可以回溯到Python2.6

这没关系

try:
    # do something
except (ValueError, IndexError):
    # do something else

但通常你想要做一些异常,所以你可以写

try:
    # do something
except (ValueError, IndexError) as e:
    # do something with e

答案 1 :(得分:4)

它捕获ValueError,并将捕获的异常分配给名称IndexError。你想要这个:

except (ValueError, IndexError):