繁体   English   中英

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

[英]How can I terminate (without raising another exception) my python script while handling an exception

在我的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)

如何在不引发异常的情况下终止脚本?

os._exit允许您退出而不会引发异常,但是我不建议您使用这种方法,因为它会不合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块内)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM