我有一个连接到服务器以向其发送一些命令的 Python 程序,但偶尔会出现此错误:
TimeoutError: [WinError 10060] A connection attempt failed because the connected party didn’t properly respond after a period time, or established connection failed because connected host has failed respond 超时错误:[WinError 10060] 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应
在以前这样的情况下,我会使用这样的东西:
try:
Do something
except KeyError:
do something else
我可以在同样的情况下做同样的事情吗? IE,
try:
Do something
except TimeoutError:
Do something again
如果是这样,除了 TimeoutError 之后我会做什么?我会再次执行相同的命令吗?
原文由 ark 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的!您可以使用
try
/except
对于 任何 异常,并且TimeoutError
没什么特别的。如果您只想重试一次,并让第二次超时算作真正的错误,是的:
(如果“做某事”不仅仅是一个简单的陈述,您可能想要分解出代码,这样您就不会重复自己。)
但是,如果你想重试多次,你可能需要一个循环:
您可能想在 --- 中添加一个
else
for
来区分这两种情况(成功,并执行了break
,而从未成功,而从未用完–的尝试)。由于这里的想法通常是处理可能的暂时性错误,因此您可能需要添加其他内容,例如:
max_retries
之后重新引发错误,或引发不同的错误。max_retries
逻辑,则可以使用(URL, retry_count)
(URL, timestamp)
,如果您还想要指数退避,则可以使用 --- 对,或者两者都使用。 (当然,这仅在您不关心响应顺序或可以在最后重新排序时才有效。)对于复杂的组合,重试装饰器(如 jterrace 的有用答案 中 链接 的装饰器)是结束行为的好方法。