在Python中尝试排除错误
我有一个Python脚本,中间有一个批处理命令在Python中尝试排除错误,python,python-2.7,subprocess,Python,Python 2.7,Subprocess,我有一个Python脚本,中间有一个批处理命令 batch_cmd = "batch command" subprocess.call(batch_cmd) 考虑这样一个场景:如果批处理命令失败,我想重复运行该批处理命令。我尝试使用try/except,这样批处理命令也必须在“except”部分重复。即: try: batch_cmd = "batch command" subprocess.call(batch_cmd) except: print "error.
batch_cmd = "batch command"
subprocess.call(batch_cmd)
考虑这样一个场景:如果批处理命令失败,我想重复运行该批处理命令。我尝试使用try/except,这样批处理命令也必须在“except”部分重复。即:
try:
batch_cmd = "batch command"
subprocess.call(batch_cmd)
except:
print "error. retrying"
subprocess.call(batch_cmd)
然而,例外情况并没有被发现。如果try块中的批处理命令失败,那么它只会绕过'except'块并执行脚本的其余部分。我怎样才能为这个重写try/except部分?或者除了try/except之外还有其他方法吗?我知道也有类似的问题,但到目前为止,解决方案对我没有帮助。subprocess.call返回错误代码。将其放入变量中,并使用if语句检查是否失败。subprocess.call返回错误代码。将其放入变量中,并使用if语句检查其是否失败。如果希望在调用的命令失败时出现异常(非零退出代码),请使用执行该命令
在这种情况下,还可以使用
子流程除外。CalledProcessError:
,以避免捕捉到超过必要数量的异常。如果希望在调用的命令失败时出现异常(非零退出代码),请使用执行该命令
在这种情况下,还可以使用
子流程除外。CalledProcessError:
,以避免捕获超出必要范围的异常。我不建议这样做。如果有什么问题,你应该设置一个固定的重试次数,如果重试次数太多,可以使用计数器来中断循环。如果它仍然无法执行,请引发新的异常,以阻止代码继续
如果你真的需要,你可以这样做
def ExectuteBatchCommand(batch_cmd)
try:
subprocess.call(batch_cmd)
except subprocess.CalledProcessError:
print "error. retrying"
ExectuteBatchCommand(batch_cmd)
我不推荐。如果有什么问题,你应该设置一个固定的重试次数,如果重试次数太多,可以使用计数器来中断循环。如果它仍然无法执行,请引发新的异常,以阻止代码继续 如果你真的需要,你可以这样做
def ExectuteBatchCommand(batch_cmd)
try:
subprocess.call(batch_cmd)
except subprocess.CalledProcessError:
print "error. retrying"
ExectuteBatchCommand(batch_cmd)
请不要使用
,除非:
。如果确实需要所有异常,请使用异常除外:
。否则,像键盘中断这样的事情也会被捕获,这几乎总是不是你想要的。@ThiefMaster同意,顺便说一句,你的那页播放了一些美妙的瑞典音乐!哈默福尔ftw=请不要使用,除非:
永远。如果确实需要所有异常,请使用异常除外:
。否则,像键盘中断这样的事情也会被捕获,这几乎总是不是你想要的。@ThiefMaster同意,顺便说一句,你的那页播放了一些美妙的瑞典音乐!哈默福尔ftw=DAdding子进程。检查\u call()是否工作!非常感谢:)接受应答添加子流程。检查调用()是否有效!非常感谢:)接受回答这很可能是因为它没有抛出一个名为的进程错误
,如果您使用异常
或窗口错误
重新编译它,它应该可以工作,至少在您达到堆栈溢出之前是这样的:pIt最有可能是因为它没有抛出一个调用的进程错误
,如果您使用异常
或窗口错误
重新编译它,它应该会工作,至少在您达到堆栈溢出之前是这样的:P