2016-05-16 79 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 –