Je voudrais quitter une cellule par programme au début du bloc-notes IPython. exit(0)
, cependant, tue le noyau.
Quelle est la bonne façon de procéder? Je préfère ne pas diviser la cellule ou arrêter manuellement l'exécution.
Je republie ma réponse de ici parce que la solution devrait également s'appliquer à votre question. Ce sera...
Importez simplement 'exit' du code ci-dessous dans votre cahier jupyter (cahier IPython) et appeler 'exit ()' devrait fonctionner. Il sortira et vous fera savoir que ...
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
Options légèrement plus "correctes":
Cela vous permettra de sortir de tous les blocs, sauf le pire.
raise KeyboardInterrupt
Une petite version plus propre de la vôtre:
assert(False)
ou simplement:
raise
si vous souhaitez enregistrer quelques frappes.
C'est loin d'être "correct" mais une façon de sortir tôt est de créer une erreur d'exécution. Donc, au lieu de retourner tôt à partir d'un script proprement avec exit(0)
on peut retourner impur avec quelque chose comme
print(variable_to_query)
() + 1
qui exécutera le code jusqu'à ce point (en terminant l'instruction d'impression), puis échouera.
Pour arrêter silencieusement les cellules actuelles et suivantes:
class StopExecution(Exception):
def _render_traceback_(self):
pass
raise StopExecution