while 与 else 循环

While loop with else

我正在使用一个 while 循环,我试图 运行 5 分钟并检查它是否获得 http 响应代码 200。问题是如果它没有获得 200,它将被保留运行ning,但当站点应该启动并且 运行ning 时,它不会转到 else。

r = requests.head("http://www.testing.co.uk")
while r.status_code != 200:
    print "Response not == to 200."
    time.sleep(30)
else:
    print "Response is 200 - OK"

重复请求。

r = requests.head("http://www.testing.co.uk")

while r.status_code != 200:
    print "Response not == to 200."
    time.sleep(30)
    r = requests.head("http://www.testing.co.uk")

else:
    print "Response is 200 - OK"

应该循环请求:

numOfRequests = 1000
for i in range(numOfRequests):
    r = requests.head("http://www.testing.co.uk")
    if r.status_code == 200:
        print "Response is 200 - OK"
        break
    print "Response not == to 200."
    time.sleep(30)

试试这个,其中包括最长约 5 分钟的超时检查:

import time
from datetime import datetime, timedelta
import requests

FIVE_MINUTES = timedelta(minutes=1) * 5
RETRY_DELAY = 30

end_time = datetime.now() + FIVE_MINUTES

while datetime.now() < end_time:
    r = requests.head("http://www.testing.co.uk")
    if r.status_code == 200:
        print "Response is 200 - OK"
        break
    else:
        print "Response not == to 200."
        time.sleep(RETRY_DELAY)
else:
    print 'Timed out'

N.B 大约是因为每个请求都将花费不可预测的时间,例如一个请求可能会挂起 2 分钟,而其他请求可能会立即失败。此外,您应该添加异常处理,因为 requests 引发失败的异常,例如 "Connection refused".