使用函数中断while循环

时间:2013-10-17 11:39:30

标签: python python-3.x user-defined-functions break

有没有办法摆脱使用函数的无限循环?如,

# Python 3.3.2
yes = 'y', 'Y'
no = 'n', 'N'
def example():
    if egg.startswith(no):
        break
    elif egg.startswith(yes):
        # Nothing here, block may loop again
        print()

while True:
    egg = input("Do you want to continue? y/n")
    example()

这会导致以下错误:

SyntaxError: 'break' outside loop

请解释为什么会发生这种情况以及如何解决这个问题。

3 个答案:

答案 0 :(得分:3)

就我而言,你不能在example()内调用break,但你可以让它返回一个值(例如:一个布尔)以便停止无限循环

代码:

yes='y', 'Y'
no='n', 'N'

def example():
    if egg.startswith(no):
        return False # Returns False if egg is either n or N so the loop would break
    elif egg.startswith(yes):
        # Nothing here, block may loop again
        print()
        return True # Returns True if egg is either y or Y so the loop would continue

while True:
    egg = input("Do you want to continue? y/n")
    if not example(): # You can aslo use "if example() == False:" Though it is not recommended!
        break

答案 1 :(得分:1)

结束while-true循环的方法是使用break。此外,break必须位于循环的直接范围内。否则,你可以利用异常来控制堆栈中的任何代码处理它。

然而,通常值得考虑另一种方法。如果您的示例实际上接近您真正想要做的事情,即取决于一些用户提示输入,我会这样做:

if raw_input('Continue? y/n') == 'y':
    print 'You wish to continue then.'
else:
    print 'Abort, as you wished.'

答案 2 :(得分:1)

在循环内部中断函数的另一种方法是从函数内引发 StopIteration,然后到 {{1在循环之外。这将导致循环立即停止。如,

StopIteration