Python:如何结束while True循环
我该怎么结束这个一直在运行的循环呢?我希望循环在标记的位置停止,但我试过用 break
和 continue
,这两者都没有结束循环。它只是让脚本继续运行,基本上就在那里,什么也不做。
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
好的,我来猜一下。我觉得你的循环确实是因为遇到break而退出了,但你可能没注意到,因为服务器会继续等待下一个客户端的请求。在函数的最后加一句调试信息,比如 print "do_GET finished"
,这样你就能看到是不是发生了这种情况。
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
0
你的if语句只期待值为0、1或2。即使你百分之百确定这些是唯一可能的值,你也应该处理一些意外情况,并在发生时抛出一个异常——无论这是否是导致脚本一直运行的原因,这都是你代码中的一个潜在漏洞:
while True:
if
....
else:
raise Exception("Unexpected value: " + checkProgress(qs["transferID"][0]))