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

mpe*_*pen 3 python exception

我刚试过写这个:

try:
    # do something
except ValueError, IndexError:
    # do something else
Run Code Online (Sandbox Code Playgroud)

当我的程序仍然扔了一个IndexError因为我以为我正在捕捉它时,我感到非常困惑.

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

Joh*_*ooy 7

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

try:
    # do something
except (ValueError, ) as IndexError:
    # do something else
Run Code Online (Sandbox Code Playgroud)

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

新语法可以回溯到Python2.6

这没问题

try:
    # do something
except (ValueError, IndexError):
    # do something else
Run Code Online (Sandbox Code Playgroud)

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

try:
    # do something
except (ValueError, IndexError) as e:
    # do something with e
Run Code Online (Sandbox Code Playgroud)

  • @Mark,不 - 它就像`除了<要捕获的异常元组>作为<varible将特定异常存储在>中:`在这个例子中,`e`可以是`ValueError`或`IndexError` (2认同)