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

0 投票
1 回答
1368 浏览
提问于 2025-04-18 14:29

在我的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 个回答

2

os._exit 这个方法可以让你直接退出程序,而不需要抛出异常,但我不太推荐这种做法,因为这样退出得很粗暴;程序不会进行任何清理工作。

你也可以稍微调整一下 subprocess 的逻辑,让 sys.exitexcept 块之外被调用:

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 块里)。

撰写回答