2014-11-23 104 views
0

的所以这个作品:关于语法捕获两种异常

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

caught 

但这并不:

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

OverflowError: 

是什么,第二个呢?

+0

如果您发现“TypeError”,它会将该实例分配给名称为“OverflowError”;见例如http://legacy.python.org/dev/peps/pep-3110/#rationale – jonrsharpe 2014-11-23 09:17:44

回答

0

A try语句可能有多个except子句,用于为不同的异常指定处理程序。最多只有一个处理程序将被执行。处理程序只处理发生在相应try子句中的异常,而不处理相同t​​ry语句的其他处理程序。一个except子句多个异常的名字带括号的元组,例如:

except (IndexError, OverflowError): 
    pass 

注意解决这个元组的括号是必需的,因为except ValueError, e:是用来做什么的现代Python是通常写为except IndexError as e:的语法。

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