我在覆盆子pi上创建了一个程序,它接收来自多个传感器的输入,并通过电子邮件将数据发送到远程mysql数据库。
问题在于,如果设备因为崩溃代码而失去互联网。有没有办法告诉python如果它失败了,请在这么多秒内再试一次并循环直到它重新连接?
由于
答案 0 :(得分:0)
"它崩溃了代码"对于出了什么问题(最好说一段特定的代码产生特定的错误消息)并不是一个非常有用的描述。所以我假设smtplib.SMTP
对象的sendmail()
方法正在引发smtplib.SMTPException
或其子类。
诀窍是捕获异常并重试,但你不应该永远这样做。你可能需要像
这样的东西import smtplib
...
sender = smtplib.SMTP(...)
...
retry_count = 10
done = False
while not done:
sender.sendmail(...)
done = True
except smtplib.SMTPException:
if retry_count:
retry_count -= 1
else:
raise <some exception you can catch in surrounding code if necessary>
您可能还希望将time.sleep()
调用放在减少重试次数的位置,因为立即重试不太可能成功。
如果异常是更基本的东西,比如套接字超时错误,则可能需要捕获它。