Python:如何在True循环结束时结束

时间:2014-06-27 17:51:56

标签: python loops while-loop

如何在True循环中结束此操作,我希望循环在标记位置结束,但我尝试了breakcontinue,两者都不会结束循环。它只是让脚本保持运行,它几乎只停留在那里,什么都不做。

class MyHandler(BaseHTTPRequestHandler):
def log_message(self, format, *args):
    return
def do_GET(self):
    if self.path.startswith("/checkTransfer"):
        qs = {}
        path = self.path
        if '?' in self.path:
            qs = parse_qs(urlparse(self.path).query)
            print "Received Transfer Check request for transfer id: " + qs["transferID"][0]
            while True:
                if checkProgress(qs["transferID"][0]) == 1:
                    self.send_response(200)
                    self.send_header('Content-type', 'text/json')
                    self.end_headers()
                    self.wfile.write('{"status" : 1}')
                    print "Transfer Completed! Checking for downloads"
                    ******* break; *******
                ******* ^ This is where I need to end the loop *******
                elif checkProgress(qs["transferID"][0]) == 0:
                    self.send_response(200)
                    self.send_header('Content-type', 'text/json')
                    self.end_headers()
                    self.wfile.write('{"status" : 0}')
                    print "Incomplete Transfer, Waiting..."
                    time.sleep(3)
                elif checkProgress(qs["transferID"][0]) == 2:
                    self.send_response(200)
                    self.send_header('Content-type', 'text/json')
                    self.end_headers()
                    print "Could Not Find Transfer, Could Be Removed"
                    self.wfile.write('{"status" : 2}')
                    break;

3 个答案:

答案 0 :(得分:0)

你的if语句只期望值为0,1或2.即使你100%确定唯一可能的值,你应该捕获意外的情况并在发生这种情况时引发异常 - 无论是否是因为在这个特殊情况下,这是一个永无止境的脚本,它是你代码中潜在的漏洞:

while True:
    if
        ....
    else:
        raise Exception("Unexpected value: " + checkProgress(qs["transferID"][0]))

答案 1 :(得分:0)

while条件设置为您尝试达到的结果的反面。

>>> import random
>>> while random.randint(0, 10) != 7:
...     print "argh"
... 
argh
argh
argh
argh #it does eventually end, and rather quickly
>>> 

在这种情况下,将值赋值给某些东西可能是谨慎的,或者只有return一旦你实现它所需要的值。由于您的while位于函数中,因此您可以使用return来打破while循环。

def resultificator(desired_outcome):
    result = None
    while result != desired_outcome:
        result = get_the_result()
    return result

答案 2 :(得分:0)

好的,我必须在这里猜测。我认为你的循环真的是在休息时退出,但你没有注意到,因为服务器只是去等待下一个客户端请求。在函数末尾放置一个类似print "do_GET finished"的调试消息,看看是否发生这种情况。