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

DYZ*_*DYZ 4 python exit ipython python-3.x

内置函数quit()在Python-3.x和IPython 3中表现不同.Hello如果在IPython中执行,则打印以下代码,但不会在Python中打印任何内容:

quit()
print("Hello")
Run Code Online (Sandbox Code Playgroud)

quit()IPython 的目的是什么?改变行为的原因是什么?

Sha*_*ger 6

它看起来像IPython's quit/ exit"function"简化为只设置一个标志,表示"下次检查时你应该退出".它不会自行提升SystemExit,因此它可能依赖于间歇性检查,如果您一次排队两个命令,则在第二个命令完成之前不会执行.

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

欢迎您追踪IPython检查的位置; 我猜它是在完成任何给定的行或单元格之后IPython完成的.

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