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()
的用途是什么?改变其行为的原因是什么?
看起来 IPython
的 quit
/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()
,这也是在脚本中提前退出的正确方法,而不是作为交互式提示的挂钩。
内置函数quit()
在Python-3.x和IPython中表现不同 3.如果在[中执行,下面的代码打印Hello
=22=],但在 Python:
quit()
print("Hello")
IPython 中 quit()
的用途是什么?改变其行为的原因是什么?
看起来 IPython
的 quit
/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()
,这也是在脚本中提前退出的正确方法,而不是作为交互式提示的挂钩。