在我的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)
如何在不抛出异常的情况下终止脚本?
答案 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
区块内。