之前已经提出过这个问题,但我在this这样的相关问题中尝试过这些问题但无济于事。
我遇到了Python exit
命令的问题,我已经排除了我的代码运行问题,因为我运行了iPython或Spyder&# 39; iPython控制台。
当我只使用一个简单的退出命令时,我收到错误:
NameError: name 'exit' is not defined
我已经按照其他链接的建议导入了sys。唯一有用的是尝试sys.exit(),在这种情况下我得到:
An exception has occurred, use %tb to see the full traceback.
SystemExit
C:\Users\sdewey\AppData\Local\Continuum\Anaconda3\lib\site-
packages\IPython\core\interactiveshell.py:2870: UserWarning: To exit: use
'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
我只说那种"有点作品"因为错误信息较小,所以不那么讨厌:)。
有什么想法吗?似乎是iPython的一个问题。我在Jupyter(使用iPython)中遇到了一个不同的问题,完全忽略了quit,我单独发布了here
答案 0 :(得分:4)
我在Pycharm的IPython shell中运行包含exit()的脚本时遇到了同样的问题。 我学习了here,该出口用于交互式shell,因此行为将根据shell的实现方式而有所不同。
我可以找到一个解决方案......
只需从下面的代码导入'exit'到你打算用IPython运行的脚本中,并且调用'exit()'应该可行。您也可以在jupyter中使用它(而不是quit
,这只是exit的另一个名称),它不会像在IPython shell中那样完全退出,让你知道...... / p>
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