Я хотел бы программно выйти из ячейки раньше в IPython Notebook. exit(0)
, однако, убивает ядро.
Каков правильный способ сделать это? Я бы предпочел не разделить ячейку или вручную остановить выполнение.
Я хотел бы программно выйти из ячейки раньше в IPython Notebook. exit(0)
, однако, убивает ядро.
Каков правильный способ сделать это? Я бы предпочел не разделить ячейку или вручную остановить выполнение.
Я переписываю свой ответ из здесь, потому что решение должно также применяться к вашему вопросу. Это будет...
Просто импортируйте 'exit' из кода ниже вашего ноутбука 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
Чуть более "правильные" варианты:
Это избавит вас от всех, кроме худших попыток/исключая блоки.
raise KeyboardInterrupt
Небольшая чистая версия:
assert(False)
или просто:
raise
если вы хотите сохранить пару нажатий клавиш.
Это далеко не "правильно", но один из способов выхода из него - создать ошибку времени выполнения. Таким образом, вместо того, чтобы вернуться с script до конца с exit(0)
с помощью exit(0)
, можно вернуться нечетко с чем-то вроде
print(variable_to_query)
() + 1
который будет запускать код до этой точки (завершение инструкции печати), а затем сбой.
В заголовке переключателя Ядро/Прерывание
Чтобы тихо остановить текущую и последующие ячейки:
class StopExecution(Exception):
def _render_traceback_(self):
pass
raise StopExecution