I'd like to programmatically exit a cell early in IPython Notebook. exit(0)
, however, kills the kernel.
我想以编程方式在IPython Notebook早期退出单元格。但是,exit(0)会杀死内核。
Whats the proper way to do this? I'd prefer not to split the cell or manually halt execution.
什么是正确的方法呢?我不想拆分单元格或手动停止执行。
3 个解决方案
#1
10
Slightly more "proper" options:
略微更“适当”的选择:
This will get you out of all but the worst try/except blocks.
除了最差的try / except块之外,这将使你脱离所有。
raise KeyboardInterrupt
A little cleaner version of yours:
你的一个更干净的版本:
assert(False)
or simply:
raise
if you want to save a couple keystrokes.
如果你想节省一些按键。
#2
4
This is far from "proper" but one way to exit early is to create a runtime error. So instead of returning early from a script cleanly with exit(0)
one can return uncleanly with something like
这远非“正确”,但提前退出的一种方法是创建运行时错误。因此,不是通过exit(0)干净地从脚本返回,而是可以使用类似的东西不清楚地返回
print(variable_to_query)
() + 1
which will run the code up until this point (completing the print statement) and then fail.
这将运行代码直到这一点(完成print语句)然后失败。
#3
3
I'm reposting my answer from here because the solution should apply to your question as well. It will...
我在这里重新发布我的答案,因为解决方案也适用于你的问题。它会...
- not kill the kernel on exit
- not display a full traceback (no traceback for use in IPython shell)
- not force you to entrench code with try/excepts
- work with or without IPython, without changes in code
退出时不要杀死内核
不显示完整的回溯(没有在IPython shell中使用的回溯)
不要强迫你用try / excepts来修改代码
使用或不使用IPython,无需更改代码
Just import 'exit' from the code beneath into your jupyter notebook (IPython notebook) and calling 'exit()' should work. It will exit and letting you know that...
只需从下面的代码中导入'退出'进入你的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
#1
10
Slightly more "proper" options:
略微更“适当”的选择:
This will get you out of all but the worst try/except blocks.
除了最差的try / except块之外,这将使你脱离所有。
raise KeyboardInterrupt
A little cleaner version of yours:
你的一个更干净的版本:
assert(False)
or simply:
raise
if you want to save a couple keystrokes.
如果你想节省一些按键。
#2
4
This is far from "proper" but one way to exit early is to create a runtime error. So instead of returning early from a script cleanly with exit(0)
one can return uncleanly with something like
这远非“正确”,但提前退出的一种方法是创建运行时错误。因此,不是通过exit(0)干净地从脚本返回,而是可以使用类似的东西不清楚地返回
print(variable_to_query)
() + 1
which will run the code up until this point (completing the print statement) and then fail.
这将运行代码直到这一点(完成print语句)然后失败。
#3
3
I'm reposting my answer from here because the solution should apply to your question as well. It will...
我在这里重新发布我的答案,因为解决方案也适用于你的问题。它会...
- not kill the kernel on exit
- not display a full traceback (no traceback for use in IPython shell)
- not force you to entrench code with try/excepts
- work with or without IPython, without changes in code
退出时不要杀死内核
不显示完整的回溯(没有在IPython shell中使用的回溯)
不要强迫你用try / excepts来修改代码
使用或不使用IPython,无需更改代码
Just import 'exit' from the code beneath into your jupyter notebook (IPython notebook) and calling 'exit()' should work. It will exit and letting you know that...
只需从下面的代码中导入'退出'进入你的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