【发布时间】:2014-11-13 17:18:51
【问题描述】:
我正在使用WinPython 的 Spyder。当我使用命令exit() 创建一个新脚本并在那里运行它时,这个命令会杀死内核:
内核似乎意外死亡。使用“重启内核”继续使用此控制台。
在此运行时环境中停止脚本的正确方法是什么?
【问题讨论】:
-
对应的 Spyder 问题现在是github.com/spyder-ide/spyder/issues/1974。
我正在使用WinPython 的 Spyder。当我使用命令exit() 创建一个新脚本并在那里运行它时,这个命令会杀死内核:
内核似乎意外死亡。使用“重启内核”继续使用此控制台。
在此运行时环境中停止脚本的正确方法是什么?
【问题讨论】:
更新:至少在 Spyder 5.0.3 中,对 sys.exit() 的调用不再杀死内核! (感谢@bhushan 提供的信息!)
对于早期版本,以下内容仍然适用:
要退出脚本,可以
使用raise SystemExit(0) 引发静默异常(无回溯)
或者像raise Exception('my personal exit message')这样的自定义异常
或者将代码封装成一个函数(例如main)并在里面使用return。
如果想在脚本中保留对exit() 的调用,可以
切换到“在新的专用 Python 解释器中执行”或
在 IPython 控制台注册退出处理程序:
def exit_handler(): raise Exception("exit()"), get_ipython().ask_exit = exit_handler
【讨论】:
正如 Robert Pollak 所建议的,Spyderlib Issue 1974 #4 中的评论是一个更好的解决方案。只需定义一个导致异常的函数,如果你想停止在 spyder 中执行脚本,就调用这个函数。
def f(): raise Exception("Found exit()")
【讨论】:
要在没有警告的情况下中断 Spyder 的执行,可以调用
raise SystemExit(0)
【讨论】:
可以使用内置解决方案:
import sys
sys.exit()
【讨论】:
适合我的解决方案:
在安装了 Spyder 5 的 Windows 上。我从 Anaconda PowerShell Prompt 运行 Spyder,所以当 Spyder 停止时,我可以转到 shell 并使用 Ctrl+c 杀死任何进程。
【讨论】: