我想以编程方式在IPython Notebook早期退出单元格。然而,exit(0)
杀死内核。
什么是正确的方法来做到这一点?我不想拆分单元格或手动停止执行。
略微更“适当”的选择:
除了最差的try / except块之外,这将使你除外。
raise KeyboardInterrupt
你的一个更干净的版本:
assert(False)
或者干脆:
raise
如果你想节省一些按键。
我正在回复here的回答,因为解决方案也适用于你的问题。它会...
只需从下面的代码中导入“退出”到您的jupyter笔记本(IPython笔记本)中,并调用'exit()'即可。它会退出并让你知道......
An exception has occurred, use %tb to see the full traceback.
IpyExit
"""
# ipython_exit.py
Allows exit() to work if script is invoked with IPython without
raising NameError Exception. Keeps kernel alive.
Use: import variable 'exit' in target script with
'from ipython_exit import exit'
"""
import sys
from io import StringIO
from IPython import get_ipython
class IpyExit(SystemExit):
"""Exit Exception for IPython.
Exception temporarily redirects stderr to buffer.
"""
def __init__(self):
# print("exiting") # optionally print some message to stdout, too
# ... or do other stuff before exit
sys.stderr = StringIO()
def __del__(self):
sys.stderr.close()
sys.stderr = sys.__stderr__ # restore from backup
def ipy_exit():
raise IpyExit
if get_ipython(): # ...run with IPython
exit = ipy_exit # rebind to custom exit
else:
exit = exit # just make exit importable
这远非“正确”,但提前退出的一种方法是创建运行时错误。因此,不要使用exit(0)
干净地从脚本中早期返回,而是可以使用类似的东西不干净地返回
print(variable_to_query)
() + 1
这将运行代码直到这一点(完成print语句)然后失败。