IPython Notebookの早い段階でプログラムでセルを終了したいと思います。ただし、exit(0)
はカーネルを強制終了します。
これを行う適切な方法は何ですか?セルを分割したり、手動で実行を停止したりしないでください。
here から回答を再投稿しています。なぜなら、解決策はあなたの質問にも当てはまるからです。そうなる...
「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
もう少し「適切な」オプション:
これにより、最悪のtry/exceptブロック以外のすべてから抜け出します。
raise KeyboardInterrupt
あなたの少しきれいなバージョン:
assert(False)
または単に:
raise
いくつかのキーストロークを保存したい場合。
これは「適切」とはほど遠いですが、早期に終了する1つの方法は、ランタイムエラーを作成することです。したがって、exit(0)
を使用してスクリプトから早期にきれいに戻る代わりに、
print(variable_to_query)
() + 1
この時点までコードを実行し(printステートメントを完了)、失敗します。
現在のセルと後続のセルを静かに停止するには:
class StopExecution(Exception):
def _render_traceback_(self):
pass
raise StopExecution