如果出现错误,我可以自动执行代码重新执行吗?

时间:2018-04-27 14:56:03

标签: python automation

我有一个程序,在同一个文件夹中包含多个.py文件;我通过在我的IDE,Pycharm中运行一个特定文件来执行它。 (该文件,我们称之为A.py,调用其中定义的单个main()方法,因此运行该文件只意味着运行该方法。)这是正在进行的研究的一部分,即使在最佳情况下由于计算复杂性需要很长时间才能完成,所以理想情况下我只需要运行,做其他事情并稍后再检查。

但是,有一个问题:

  • 程序的行为取决于远程服务器对请求的反应;
  • 有时(过去几天越来越频繁),这导致SSLError和退出代码1;
  • 并且,出于这个问题的目的,我们假设我无法通过编辑自己的代码来消除这种间歇性问题。

所以我想做的是,而不是每次发生这种情况时手动重启,设置一个有限的允许重试次数,如果遇到则退出退出代码1,导致下一次尝试。

如果您原谅伪代码,那么在第二个文件中就会出现这样的情况:

from a import main

numtries, maxtries = 0, 10

while numtries < maxtries:

    ec = exitcode(main)

    if ec != 0: numtries += 1

可以这样做吗?

2 个答案:

答案 0 :(得分:0)

这是一个有趣的问题,因为您描述的是非单元测试(因为可能存在SSL依赖关系),因为您的代码需要您无法控制的依赖项。

您是否可以重新编写单元测试以覆盖您可以直接控制的代码?然后将SSL-Types移动到更高模块的测试策略。

关于伪代码......如果你在得到正确的答案之前觉得有3个问题出现了问题(你会尝试SSLException不是吗?)那就去吧.... / p>

但为什么SSL会失败?你的软件应该不处理吗?

答案 1 :(得分:0)

你必须抓住异常。返回代码来自整个执行,但您想要的是:

retries = 0
while retries > limit:
    try:
        A.main()
    except SSLError:
        retries += 1

您也可以在shell脚本中执行此操作。然后,您将使用返回码1来检查是否成功,正如您最初提出的那样。但是,我会建议第一种方法。