在Python中,如果函数抛出错误,如何重新运行它

use*_*850 1 python error-handling try-except

下面是我的代码片段,我想知道的是,假设如果函数 main2() 由于某种原因抛出错误,我如何让我的异常在它中断之前再次运行相同的函数 3 次?

只是在这里补充一下,任何函数都可能会抛出错误(不仅仅是 main2()),而且我可能不仅有 3 个函数,还有更多函数

import numpy as np

def main():
    np.load('File.csv')

def main1():
    np.load('File1.csv')

def main2():
    np.load('File2.csv')

for i in range(1, 10):
    try:
        main()
        main2()
        main3()
    except Exception as e:
        print e
    else:
        break
Run Code Online (Sandbox Code Playgroud)

Fre*_*ik 7

你可以使用python 重试装饰器来做到这一点

@retry((Exception), tries=3, delay=0, backoff=0)
def main2():
   np.load('File2.csv')
Run Code Online (Sandbox Code Playgroud)

这与您编写的方式相同:

error_counter = 0
    def main2():
       try:
          np.load('File2.csv')
       except:
          if error_counter < 3
             error_counter += 1
             main2()
          raise Exception("Will not try again, have tried 3 times")  
       error_counter = 0
Run Code Online (Sandbox Code Playgroud)

如果你想让它变得健壮和干净,你应该选择第一个解决方案。您可以在大型企业项目中重复使用的第一个解决方案,并且由于回退时间,它可以将磁盘负载、用户负载网络问题与回退/延迟时间考虑在内。

如果不使用时间延迟,您将在一秒钟内完成所有 3 次尝试。对于某些异常情况来说这很好,但是当遇到网络问题或磁盘问题时,您需要更复杂的解决方案。

另外,考虑不要捕获所有异常,缓存所有异常是一个不好的做法。更多信息,为什么不好