Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中尝试排除错误_Python_Python 2.7_Subprocess - Fatal编程技术网

在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.

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

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