python-尝试后,sys.exit无法按预期工作:

我尝试了以下脚本.

我的初衷是,如果成功执行以下代码段中的命令“ command_a”,则程序结束.否则,它将执行其他处理.

#!/usr/bin/python

import subprocess
try:
  command = "command_a"
  subprocess.check_call(command.split())
  print "Woks fine!, and stopping"
  sys.exit()


except:
  pass

print "Continue additional processing"
call_some_additional_processing()

但是,我注意到sys.exit()不能按预期工作.即使subprocess.check_call成功,它也会调用call_some_additional_processing().

您能告诉我原因是什么,什么是解决这个问题的最佳方法?

解决方法:

sys.exit通过引发SystemExit异常来工作.由于您的裸机除外,因此将捕获并抑制SystemExit异常.

这就是为什么您不应该使用裸子句的原因之一.至少要捕获Exception:

try:
    sys.exit()
except Exception:
    pass

SystemExit doesn’t inherit from Exception1开始,不会被捕获.作为更一般的规则,如果您不知道如何处理异常,则永远不要捕获异常.甚至捕获Exception几乎总是比您想要的更广泛.

最后,如果您发现自己处在不得不处理别人的代码的情况下,并且除了无法更改以外,他们几乎没有代码,则可以使用os._exit终止当前进程,而无需提高SystemExit.这通常是一个坏主意,但是只能在最恶劣的情况下使用2.

1SystemExit和KeyboardInterrupt显式继承自BaseException,以便在有人捕获Exception时不会被捕获.

2希望我已经很清楚地表明最后一段旨在提供信息-我不建议使用;-)

上一篇:如何将带有空格的字符串从Python发送到Bash子进程作为单个值?


下一篇:Python Popen在复合命令(PowerShell)中失败