Python 当我试图捕获多个异常时,如果省略括号会发生什么?

Python 当我试图捕获多个异常时,如果省略括号会发生什么?,python,exception,Python,Exception,我只是试着写下: try: # do something except ValueError, IndexError: # do something else 然后,当我的程序仍然抛出一个索引器时,我感到非常困惑,因为我认为我正在捕获它 如果它没有捕获索引器,那么这段代码到底做了什么?它似乎不是语法错误。它捕获ValueErrors,并将捕获的异常分配给名称索引器。你想要这个: except (ValueError, IndexError): 由于这个错误/问题非常常见,Py

我只是试着写下:

try:
    # do something
except ValueError, IndexError:
    # do something else
然后,当我的程序仍然抛出一个
索引器时,我感到非常困惑,因为我认为我正在捕获它


如果它没有捕获
索引器
,那么这段代码到底做了什么?它似乎不是语法错误。

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

except (ValueError, IndexError):

由于这个错误/问题非常常见,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

等一下。。它捕获一个
ValueError
,将其放入一个1元组中,并为其命名为IndexError?i、 例如,要获取ValueError,我必须使用
索引器[0]
?这样行吗?在作用域的持续时间内,是否将索引器从类型重新定义为异常实例,或者是什么?@标记,否-这类似于
,除了as:
在本例中
e
将是
ValueError
索引器
对。我把自己弄糊涂了。这对我来说已经足够清楚了:)@Ralph:Oops。抢手货这就是我的意思:)谢谢。