2016-05-16 134 views
0

我學會了如何使用except函數來防止代碼崩潰,但我想更好地理解python如何執行它。python如何處理特殊情況?

例如,我有添加一對數字的代碼,如果變量nums有兩個以上的數字,它應該給AssertionError。

1 def sum_pair(pair): 
2  assert len(pair) == 2 
3  return pair[0] + pair[1] 

4 try: 
5  total = sum_pair(nums) 
6  print 'The total is', total 
7 except AssertionError: 
8  print 'Abort' 

所以從我的角度來看,python只執行第1,2,4,5,7和8行。 這是理解它的正確方法嗎?

謝謝

+0

函數內的語句不被執行,直到調用函數啓動代碼。所以第2行將不會執行,直到第5行。 – Barmar

回答

2

當發出異常信號時,搜索調用堆棧的try塊的except子句與該異常的類型匹配。堆棧被解除到那一點,except子句中的代碼被執行,然後在try塊之後繼續執行。

因此,當2號線檢測到斷言失敗,它會立即退出sum_pair()功能並執行來自行8

1

從技術上講,它按順序執行行4,5,1,2,7,8。

+0

我很確定OP意識到這一點,並且只是對執行的行號進行排序。此外,這個答案將更適合作爲評論。 – TigerhawkT3

+0

@ TigerhawkT3,夠了。當我讀到這個問題時,我把它解釋爲OP想知道執行順序是否是正確的方式來理解它,但是你的觀點很好。 –

+3

恕我直言,'def'行首先被執行,以便識別器'sum_pair'知道解釋器。所以執行順序是1,4,5,2,7,8 –