gpt4 book ai didi

python - 忽略特定时间内的异常情况

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:47 25 4
gpt4 key购买 nike

尝试使 try 在循环中运行,因为我正在启动包含网络服务器的计算机,并且我想让它运行,而不仅仅是直接进入 except 并停止脚本。我已经为 http-status 代码做了一段时间,但只有在机器启动时才有效。

所以我的问题是如何让 try 循环大约 5 分钟,然后再进入 except ?抱歉我的解释不好。

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"

最佳答案

你可以这样做:

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 循环继续。

如果满足条件,则异常(exception)为 re-raised由其他一些外部代码处理或根本不处理——在这种情况下,您将看到异常“破坏”(用您的话说)程序。

使用这种方法的好处是(而不是 while True:):

while datetime.datetime.now() > t_end:

如果你发现自己在 while 循环之外,你就知道你是从 break 到达那里的,而不是从 5 分钟过去后到达那里。如果您想在这种情况下做一些特殊的事情,您还可以保留异常。

关于python - 忽略特定时间内的异常情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28994657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com