尝试让try
在循环中运行,因为我正在启动包含Web服务器的计算机,我想让它运行而不是直接转到except并停止脚本。我已经为http状态代码做了一段时间,但这只有在机器启动时才有效。
所以我的问题是如何在try
之前将except
循环播放5分钟?对不起,我的解释很糟糕。
try:
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"
except requests.ConnectionError:
print "NOT FOUND - ERROR"
答案 0 :(得分:1)
您可以执行以下操作:
import requests, time, datetime
# Determine "end" time -- in this case, 5 minutes from now
t_end = datetime.datetime.now() + datetime.timedelta(minutes=5)
while True:
try:
r = requests.head("http://www.testing.co.uk")
if r.status_code != 200:
# Do something
print "Response not == to 200."
else:
# Do something else
print "Response is 200 - OK"
break # Per comments
time.sleep(30) # Wait 30 seconds between requests
except requests.ConnectionError as e:
print "NOT FOUND - ERROR"
# If the time is past the end time, re-raise the exception
if datetime.datetime.now() > t_end: raise e
time.sleep(30) # Wait 30 seconds between requests
重要的一点是:
if datetime.datetime.now() > t_end: raise e
如果不满足条件(少于5分钟),则会默默忽略该异常并继续while循环。
如果符合条件 ,则异常为re-raised由其他一些外部代码处理或根本不处理 - 在这种情况下,您将看到异常“打破“(用你的话说)程序。
使用此方法优于(而不是while True:
)的好处:
while datetime.datetime.now() > t_end:
如果你发现自己在while循环之外,你知道你是从break
而不是从5分钟到达那里的。如果你想在这种情况下做一些特别的事情,你也可以保留例外。