在处理异常时如何终止(不引发另一个异常)我的python脚本

时间:2014-07-23 19:23:38

标签: python python-3.x

在我的python3脚本中,我使用subprocess模块调用外部程序。当被调用程序以非零状态代码退出时,抛出CalledProcessError。在这种情况下,我打印一条错误消息,并希望在异常处理程序中终止脚本。

我的问题是,exit()本身会抛出一个SystemExit异常,所以我最终得到:

During handling of the above exception, another exception occurred:

该脚本与此类似:

try:
    output = subprocess.check_output(["program"])
    return output
except subprocess.CalledProcessError as error:
    print("program returned non-zero exit status", file=sys.stderr)
    exit(error.returncode)

如何在不抛出异常的情况下终止脚本?

1 个答案:

答案 0 :(得分:2)

os._exit允许你在不引发异常的情况下退出,但我不推荐这种方法,因为它不合适地退出;不会进行清理。

您还可以稍微调整subprocess的逻辑,以便在sys.exit块之外调用except

try:
    output = subprocess.check_output(["programm"])
    return output
except subprocess.CalledProcessError as error:
    print("programm returned non-zero exit status", file=sys.stderr)
    returncode = error.returncode
exit(returncode)  # You'll only reach this if an exception occurred.

这样你就不应该得到回溯(尽管我实际上无法重现你得到的信息,即使我将exit留在except区块内。