如何在Spyder中退出脚本?

8
我正在使用WinPython的Spyder。当我使用命令exit()创建一个新脚本并在其中运行时,此命令会终止内核:

似乎内核意外死亡。使用“重新启动内核”以继续使用此控制台。

在这个运行时环境中,停止脚本的正确方法是什么?


对应的Spyder问题现在是https://github.com/spyder-ide/spyder/issues/1974。 - Robert Pollak
5个回答

14

更新:至少在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

这是问题的答案吗? - Nilesh
1
@Lafada:我还不知道。请参见https://code.google.com/p/spyderlib/issues/detail?id=1974。 - Robert Pollak
如果这不是答案,请在评论中提出或仅更新现有问题。如果您将其发布为答案,则其他人会产生错误的印象。 - Nilesh

4
正如Robert Pollak建议的那样,Spyderlib Issue 1974 #4中的评论是更好的解决方案。只需定义一个导致异常的函数,并在您想要停止spyder内脚本执行时调用此函数即可。
def f(): raise Exception("Found exit()")

谢谢你,@ollydbg23!我已经将你的答案包含在我的回答中。 - Robert Pollak
如何从程序外部执行运行中定义的函数? - garyp

1
“可以使用内置解决方案:”
import sys

sys.exit()

-1

如果要在不警告的情况下中断Spyder的执行,可以调用

raise SystemExit(0)

-2
我使用的解决方案是: 在安装了Spyder 5的Windows上,我从Anaconda PowerShell提示符中运行Spyder,因此当Spyder停止响应时,我可以转到shell并使用Ctrl+c来终止任何进程。

这个问题不是关于Spyder崩溃的时间,所以这个答案与主题无关。 - Robert Pollak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接