IPython Notebook - early exit from cell
我想以编程方式在IPython Notebook早期退出单元格。 然而,
什么是正确的方法来做到这一点? 我不想拆分单元格或手动停止执行。
略微更"适当"的选择:
除了最差的try / except块之外,这将使你除外。
1 | raise KeyboardInterrupt |
你的一个更干净的版本:
1 | assert(False) |
或者干脆:
1 | raise |
如果你想节省一些按键。
我在这里重新发布我的答案,因为解决方案也适用于你的问题。它会...
- 退出时不要杀死内核
- 不显示完整的回溯(没有在IPython shell中使用的回溯)
- 不要强迫你用try / excepts来修改代码
- 使用或不使用IPython,无需更改代码
只需从下面的代码中导入"退出"到您的jupyter笔记本(IPython笔记本)中,并调用'exit()'即可。它会退出并让你知道......
1 2 3 | An exception has occurred, use %tb to see the full traceback. IpyExit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | """ # 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 |
这远非"正确",但提前退出的一种方法是创建运行时错误。因此,不是通过
1 2 | print(variable_to_query) () + 1 |
这将运行代码直到这一点(完成print语句)然后失败。
要安静地停止当前和后续的单元格:
1 2 3 4 5 | class StopExecution(Exception): def _render_traceback_(self): pass raise StopExecution |