2017-05-06 78 views
5

为什么下面的Python代码片段的输出功率不只是也不例外:1,因为第一次迭代过程中没有出现的异常。来自python文档(https://docs.python.org/2.7/tutorial/errors.html)。蟒蛇:尝试/除/ else和continue语句

try ... except语句有一个可选的else子句,当 存在时,它必须遵循所有except子句。如果try子句不引发异常,则必须执行 代码。

$ cat hello.py 
for x in range(1,10): 
    try: 
    if x == 1: 
     continue 
    x/0 
    except Exception: 
    print "Kaput:%s" %(x) 
    else: 
    print "No exception:%s" %(x) 
    break 

$ python hello.py 
    Kaput:2 
    Kaput:3 
    Kaput:4 
    Kaput:5 
    Kaput:6 
    Kaput:7 
    Kaput:8 
    Kaput:9 

$ python -V 
Python 2.7.8 
+1

请注意我的意图是不让代码工作。这是一个玩具的例子,我更加想知道为什么这个行为不符合教程文档的内容。如果有文档或Python规范解释此行为的原因,请提供参考。 – sateesh

回答

5

本教程给出了一个好的开始,但不是语言参考。 Read the reference here.

请特别注意:

可选的else子句,如果执行和控制时流出该try子句结束。

澄清脚注2:

目前,控制除了在异常或返回的执行的情况下“流出结束”,继续或break语句。

因此,您使用continue明确解决。

1

代码有continue,所以它永远不会到else块。为了实现你的结果,你不能到continue

代码:

for x in range(1, 10): 
    try: 
     if x != 1: 
      x/0 
    except Exception: 
     print "Kaput:%s" % (x) 
    else: 
     print "No exception:%s" % (x) 
     break 

结果:

No exception:1 
1

它与您使用的continuebreak做。我认为这是你要做的功能。基本上,continue不会跳到else语句,它继续与代码(传递try语句)。而且,break打破了for循环,因此不会产生更多输出,所以我删除了该语句。

for x in range(1,10): 
    try: 
    if x != 1: 
     x/0 
    except Exception: 
    print "Kaput:%s" %(x) 
    else: 
    print "No exception:%s" %(x) 
0

这是因为continue语句...它将控制权交给语句。尝试删除继续并为x/0添加条件语句,如if(x!= 1):x/0 then看到你想要的输出..