Python:如何结束while真循环

2024-10-03 09:09:21 发布

您现在位置:Python中文网/ 问答频道 /正文

如何结束while True循环,我希望循环在标记的位置结束,但是我尝试了break和{},两者都没有结束循环。它只是让脚本继续运行,而它基本上就停留在那里,什么也不做。

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;

Tags: pathselfsendifresponsetypecontenttransfer
3条回答

将您的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循环。在

^{pr2}$

好吧,我得猜猜看。我想你的循环真的会随着中断而退出,但是你没有注意到,因为服务器只是去等待下一个客户机请求。在函数的末尾放一个调试消息,比如print "do_GET finished",看看是否发生了这种情况。在

if语句只需要值0、1或2。即使您百分之百确定这是唯一可能的值,您也应该捕获意外情况并在发生异常时引发异常-不管这是否是导致此特定情况下脚本永不结束的原因,这都是代码中的一个潜在漏洞:

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

相关问题 更多 >