如何在处理异常时终止我的 Python 脚本(不引发另一个异常)
在我的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.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
块里)。