在 python 中导致异常后重复某事的最优雅方法是什么?
我有这样的东西[以伪代码为例]:
try:
do_some_database_stuff()
except DatabaseTimeoutException:
reconnect_to_database()
do_some_database_stuff() # just do it again
但是想象一下,如果我没有一个很好的函数,而是有很多代码。重复的代码不是很好。
所以我觉得这样稍微好一点:
while True:
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
reconnect_to_database()
如果异常确实解决了问题,那就足够了。如果不是,我需要一个计数器来防止无限循环:
i = 0
while i < 5:
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
reconnect_to_database()
i += 1
但后来我真的不知道它是否有效所以它也是:
while i <= 5:
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
if i != 5:
reconnect_to_database()
else:
raise DatabaseTimeoutException
i += 1
如您所见,它开始变得非常困惑。
表达这种逻辑的最优雅的方式是什么?
- 尝试一下
- 如果失败,应用修复
- 再试 n 次,包括修复
- 如果它继续失败给我一个错误以防止无限循环
最佳答案
您可以使用“for-else”循环:
for ii in range(5):
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
reconnect_to_database()
else:
raise DatabaseTimeoutException
或者,没有:
for ii in range(5):
try:
do_some_database_stuff()
break
except DatabaseTimeoutException:
if ii == 4:
raise
reconnect_to_database()
关于python - 如何在 python 中出现异常时重复某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794352/