我想知道是否有一种方法以编程方式停止python脚本执行而不像我们使用此代码那样终止进程:
import sys
sys.exit()
这将是相当于Ctrl + c
的代码答案 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()
相关问题:
答案 3 :(得分:1)
最简单的OP解决方案肯定是raise KeyboardInterrupt
吗?
这在终端中产生与ctrl + C相同的效果,但是可以在脚本中的任何位置调用它。无需导入或进一步定义。