在 while 语句中尝试块

Posted

技术标签:

【中文标题】在 while 语句中尝试块【英文标题】:try block inside while statement 【发布时间】:2012-07-30 06:39:16 【问题描述】:

我刚开始使用 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: 有关,但为什么会这样?

【问题讨论】:

【参考方案1】:

我最近遇到了一个没有输入的问题,对于有多少测试用例 .while 循环和try-except 非常有帮助。

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

【讨论】:

【参考方案2】:

不是蟒蛇人,但是这个怎么样

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'

【讨论】:

【参考方案3】:

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'

【讨论】:

【参考方案4】:

这可能是因为break 语句离开了循环。 break 语句只有在前一行没有异常时才会到达。

【讨论】:

以上是关于在 while 语句中尝试块的主要内容,如果未能解决你的问题,请参考以下文章

Do-While 循环,但 while 语句的值在 Do 语句内

14PHP 循环 - While 循环

循环语句

Python语法基础03(if语句,while循环与for循环)

else配合while或者for循环只用注意点

6流程控制-while