停止python脚本而不杀死python进程

时间:2015-02-09 15:20:40

标签: python python-2.7

我想知道是否有一种方法以编程方式停止python脚本执行而不像我们使用此代码那样终止进程:

import sys
sys.exit()

这将是相当于Ctrl + c

的代码

4 个答案:

答案 0 :(得分:6)

定义您自己的例外,

class HaltException(Exception): pass

并将脚本包装在

try:
    # script goes here

    # when you want to stop,
    raise HaltException("Somebody stop me!")

except HaltException as h:
    print(h)
    # now what?

答案 1 :(得分:4)

以下是我发现的工作 - 在停止翻译时停留在翻译中。

# ------------------------------------------------------------------
# Reset so get full traceback next time you run the script and a "real"
# exception occurs
if hasattr (sys, 'tracebacklimit'):
    del sys.tracebacklimit

# ------------------------------------------------------------------
# Raise this class for "soft halt" with minimum traceback.
class Stop (Exception):
    def __init__ (self):
        sys.tracebacklimit = 0

# ==================================================================
# ... script here ...
if something_I_want_to_halt_on:
    raise Stop ()

# ... script continues ...

答案 2 :(得分:2)

我在开发Sublime Text包时遇到了这个问题。我试图阻止一个Sublime Text Python包,在重新加载包时测试一些东西。

如果我调用sys.exit(),我会杀死Sublime Text python解释器并需要重新启动Sublime Text。但在搜索之后我发现解决方案非常简单,我只需要调用raise ValueError(),而不是sys.exit()

import sys
print(sys.path)

sys.exit()

- >

import sys
print(sys.path)

raise ValueError()

这将在运行print(sys.path)后立即停止python脚本执行。虽然它会打印出大堆栈的痕迹。但是如果在sys.tracebacklimit = 1之前添加指令raise ValueError(),则将堆栈跟踪调用减少到一行:

import sys
print(sys.path)

raise ValueError()

- >

import sys
print(sys.path)

sys.tracebacklimit = 1
raise ValueError()

相关问题:

  1. Stop running python script without killing the interpreter
  2. Manually raising (throwing) an exception in Python

答案 3 :(得分:1)

最简单的OP解决方案肯定是raise KeyboardInterrupt吗?

这在终端中产生与ctrl + C相同的效果,但是可以在脚本中的任何位置调用它。无需导入或进一步定义。