在语句中尝试阻止

use*_*416 4 python if-statement exception-handling while-loop

我刚刚开始使用Python 2.7,我不明白为什么会发生什么:

在下面的代码中,来自python 2.7.2教程的示例的装饰版本,我得到了一个意想不到的结果:

while True:
    try:
        x = int(raw_input("Please enter a number: "))
        break
    except ValueError:
        print "Oops!  That was not a valid number.  Try again..."
    else:
        print 'Thanks,',x,'is indeed an integer'
    finally:
        print 'all done, bye'
Run Code Online (Sandbox Code Playgroud)

当我输入一个整数时,代码会忽略该else:语句并直接切入finally:.显然它与while True:顶部有关但为什么会发生?

She*_*ock 19

break语句正在退出循环,因此永远不会达到else语句.

把break放在else子句中,就像这样:

while True:
    try:
        x = int(raw_input("Please enter a number: "))
    except ValueError:
        print "Oops!  That was not a valid number.  Try again..."
    else:
        print 'Thanks,',x,'is indeed an integer'
        break

print 'all done, bye'
Run Code Online (Sandbox Code Playgroud)


bit*_*onk 7

这可能是因为break语句离开了循环.break只有在之前的行中没有异常时才会达到该声明.