while循环内的try代码块

6

我刚开始使用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'

当我输入一个整数时,代码会忽略 else: 语句并直接跳到 finally:。显然这与顶部的 while True: 有关,但为什么会发生这种情况?
4个回答

25

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'

7
也许是由于 break 语句导致循环终止。只有在前一行没有异常的情况下,才会执行 break 语句。

3
不是很懂Python,但这个怎么样?
while True:
    try:
        x = int(raw_input("Please enter a number: "))
        print 'Thanks,', x, 'is indeed an integer'
    except ValueError:
        print "Oops!  That was not a valid number. Try again..."
    finally:
        print 'all done, bye'

0

最近我遇到了一个问题,其中没有输入,需要测试多少个案例。使用while循环和try-except非常有帮助。

while(True):
    try:
        x=(input())
        x1,x2=x.split()
        print(int(x1)+int(x2))
    except:
        break

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接