2014-11-23 73 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:這不是你想要的。