Python 如何使用方法结束循环?

Python 如何使用方法结束循环?,python,Python,如何使用方法强制结束while循环 class Test(object): def start(self): while True: self.stop() def stop(self): return break obj=Test() obj.start() 实现这一点的最简单方法是提出并执行一个StopIteration。这将立即停止循环,而RvdK将在下一次迭代时停止 class Test(object): def start(self):

如何使用方法强制结束while循环

class Test(object):

  def start(self):
    while True:
      self.stop()

  def stop(self):
    return break

obj=Test()
obj.start()

实现这一点的最简单方法是提出并执行一个
StopIteration
。这将立即停止循环,而RvdK将在下一次迭代时停止

class Test(object):

  def start(self):
    try:
      while True:
        self.stop()
    except StopIteration:
      pass

  def stop(self):
    raise StopIteration()

obj = Test()
obj.start()

您应该保留一个标志,并在while循环中检查它

class Test(object):
    def __init__(self):
        self.running = False

    def start(self):
        self.running = True
        while self.running:
            self.running = not self.stop()


    def stop(self):
        return True

obj=Test()
obj.start()
如果您想立即停止,则需要呼叫中断:

def start(self):
    self.running = True
    while self.running:
        if self.stop():
            break;
        # do other stuff


好主意,但是你不能在pythonth中返回
break
,这不是
StopIteration
的作用。。。OP最好只写一行
if self.stop():break
行。@Kevin您可以使用任何异常,甚至自定义异常,但我认为
StopIteration
最能说明目的。在我看来,异常似乎有点过火…@RvdK是这样,但如果您有多个嵌套循环,这似乎是python的方式(这是一个稍微不同的场景)@RvdK虽然它们被称为异常,但也可能被视为事件或消息。您的第二个示例将在第一次迭代时中断。
self.stop
始终返回
True
您的循环将永远不会到达
#do other stuff
行。@That1Guy:在OP示例中,它也将在第一次迭代时中断。我认为这只是一个简单的例子,实际上
stop()
只有在满足某些条件时才会返回True。@Luatorth这是一个公平的观点。@TimCastelijns:在OP的例子中,它也会在第一次迭代时中断。我认为这只是一个简单的例子,实际上
stop()
只有在满足某些条件时才会返回True。但是,这并不能真正回答问题,因为我想这是故意的,
stop()
不用于循环的条件。@TimCastelijns循环没有任何作用,问题是如何结束循环。@TimCastelijns但好的,我添加了一个替代方案。公平地说,我明白你的观点
class Test(object):

  def start(self):
    while not self.stop():
        pass

  def stop(self):
    return True

obj=Test()
obj.start()
class Test(object):

  def start(self):
    while True:
        if self.stop():
            break

  def stop(self):
    return True

obj=Test()
obj.start()