Python中的Try-except错误

时间:2013-04-17 21:44:07

标签: python python-2.7 subprocess

我有一个Python脚本,其间有批处理命令,

batch_cmd = "batch command"
subprocess.call(batch_cmd)

考虑这种情况,如果失败,我想重复运行这个批处理命令。我尝试使用try / except以使batch_cmd也必须在'except'部分重复。那就是:

try: 
    batch_cmd = "batch command"
    subprocess.call(batch_cmd)

except:
    print "error. retrying"
    subprocess.call(batch_cmd)

然而,异常并未被捕获。如果try块中的批处理命令失败,那么它只是绕过'except'块并执行剩余的脚本。我怎样才能为此重写try / except部分?或者除了try / except之外还有其他方法吗?我知道在SO上也有过类似的问题,但到目前为止解决方案对我没有帮助。

3 个答案:

答案 0 :(得分:2)

如果您想要在被叫命令失败(非零退出代码)的情况下发生异常,请使用subprocess.check_call(batch_cmd)执行它。

在这种情况下也使用except subprocess.CalledProcessError:以避免捕获超出必要的例外情况。

答案 1 :(得分:1)

我不推荐它。如果有的话,你应该设置一定数量的重试,并使用一个计数器来打破循环,如果它尝试太多次。如果它仍然无法执行raise新异常以阻止代码继续执行。

如果你真的需要,你可以像这样递归。

def ExectuteBatchCommand(batch_cmd)
    try: 
        subprocess.call(batch_cmd)
    except subprocess.CalledProcessError:
        print "error. retrying"
        ExectuteBatchCommand(batch_cmd)

答案 2 :(得分:0)

subprocess.call返回错误代码。将其放在变量中并使用if语句检查它是否失败。