如何在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;
答案 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"
的调试消息,看看是否发生这种情况。