quit() 在 Python-3.x 和 IPython 中的工作方式不同

quit() works differently in Python-3.x and IPython

内置函数quit()在Python-3.x和IPython中表现不同 3.如果在[中执行,下面的代码打印Hello =22=],但在 Python:

中不打印任何内容
quit()
print("Hello")

IPython 中 quit() 的用途是什么?改变其行为的原因是什么?

看起来 IPythonquit/exit "function" 简化为只设置一个标志说 "you should exit when this is next checked"。它不会引发 SystemExit 本身,因此它可能依赖于间歇性检查,如果您同时将两个命令排队,则在第二个命令完成之前不会执行。

您可以在 IPython 提示符下自行检查,首先 运行 quit?? 以查看它是一个可调用的 class,其 __call__ 委托给 self._ip.ask_exit()。接下来,运行 quit._ip.ask_exit?? 你会看到 ask_exit 只是设置了一个标志,self.exit_now = True(如果你检查它,它是一个普通属性,而不是 property 隐藏代码执行)。

欢迎您追踪 IPython 在哪里检查;我猜它是在 IPython 的任何给定行或单元格完成后完成的。

从根本上说,不同之处在于 IPython 中的 quit 与常规 Python 的交互式解释器中的 quit 从未相同; quit/exit 作为内置函数旨在替换为备用交互式解释器,并且不需要完全相同的行为。如果您想要一致的退出行为,import sys 和 运行 sys.exit(),这也是在脚本中提前退出的正确方法,而不是作为交互式提示的挂钩。