关于捕获两种类型的异常的语法

时间:2014-11-23 09:11:49

标签: python python-2.7

这样可行:

try:
    raise OverflowError
except (IndexError, OverflowError):
    print 'caught'

caught

但这不是:

try:
    raise OverflowError
except IndexError, OverflowError:
    print 'caught'

OverflowError: 

第二个人做了什么?

1 个答案:

答案 0 :(得分:0)

try语句可能有多个except子句,以指定不同异常的处理程序。最多将执行一个处理程序。处理程序仅处理相应try子句中发生的异常,而不处理同一try语句的其他处理程序中的异常。 except子句可以将多个异常命名为带括号的元组,例如:

except (IndexError, OverflowError):
    pass

请注意,此元组周围的括号是必需的,因为except ValueError, e:是用于现代Python中通常写为except IndexError as e:的语法。

仍支持旧语法以实现向后兼容性。这意味着except IndexError, OverflowError:不等同于except (IndexError, OverflowError):,而是等同于except IndexError as OverflowError:,这不是您想要的。