Use exit() or Ctrl-Z plus Return to exit
通常当您键入exit
时,您想要退出程序。为什么解释器知道我正在尝试退出命令行时会给我上面的错误?为什么它不直接退出?我知道这并不重要,这是个愚蠢的问题,但我很好奇。
Use exit() or Ctrl-Z plus Return to exit
通常当您键入exit
时,您想要退出程序。为什么解释器知道我正在尝试退出命令行时会给我上面的错误?为什么它不直接退出?我知道这并不重要,这是个愚蠢的问题,但我很好奇。
exit()
exit()
起作用,他们想知道为什么没有括号的 exit
不能起作用。所以这个答案只是重复了问题的一部分,实际上并没有回答问题。 - Ben Lee在我的Python解释器中,exit
实际上是一个字符串而不是一个函数 -- '使用 Ctrl-D (即 EOF) 退出.'
。您可以通过输入type(exit)
在您的解释器中检查。
在活动的Python中,exit
是一个函数。如果您未调用该函数,它将打印对象的字符串表示形式。这是返回任何对象的默认行为。只是设计者认为人们可能会尝试键入exit
来退出解释器,因此他们将退出函数的字符串表示形式设置为有用的消息。您可以通过键入str(exit)
甚至print exit
来检查此行为。
exit
时,它会查找具有该名称的变量并在其上调用__repr__
(或__str__
)。通常,你会得到类似这样的结果:<function exit at 0x00B97FB0>
但是,他们决定重新定义exit
对象的函数来显示一条有用的消息。无论这是否是一种愚蠢的行为都是一个主观问题,但它不能"只是退出"的一个可能原因是:
假设你正在使用调试器查看代码,其中一个对象引用了exit
函数。当调试器尝试在该对象上调用__repr__
来向您显示该函数时,程序突然停止!这将非常出乎意料,采取措施来对抗这种行为可能会进一步复杂化事情(例如,即使将该行为限制为命令行,如果您尝试打印具有exit
作为属性的某些对象会怎样?)
import sys
,之后你将调用sys.exit()来退出解释器。 - Michael Dillon在 Windows 上使用 Anaconda 4.5+ 和 Python 3.6+,请使用以下命令:
Ctrl+Z
或者exit()
在某些情况下,您可能需要使用
Ctrl+Break
如果你的电脑没有Break
键,那么看这里。
我建议您使用 Ctrl-D 退出 Python 解释器。这是表示文件结尾或传输结束的旧 ASCII 代码。
Ctrl-Break
始终有效。对于Python 2.7、3.4和3.6版本,Ctrl-D
或 Ctrl-Z
在Windows系统中也是有效的。但是,在Python 3.7版本中,这些快捷键不再起作用,最短的ASCII序列是 Ctrl-Z
Enter
。 - Bob Stein这条信息是exit
的__str__
属性。
看看这些例子:
1
>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit
2>>> exit.__str__()
'Use exit() or Ctrl-D (i.e. EOF) to exit'
3
>>> getattr(exit, '__str__')()
'Use exit() or Ctrl-D (i.e. EOF) to exit'
exit
实例化的类的__repr__
中。然而,这会导致令人惊讶和不一致的行为,特别是在比较脚本和解释器中发生的情况时。 - Karl Knechtel您可以解决这个问题。
将 PYTHONSTARTUP
链接到一个包含以下内容的 Python 文件。
# Make exit work as expected
type(exit).__repr__ = type(exit).__call__
这是怎么运作的?
Python命令行是一个读取-求值-打印循环环境,也就是当你输入文本时,它会读取该文本,对其进行求值,并最终打印结果。
当你输入 exit()
时,它被求值为一个类型为 site.Quitter
的可调用对象,并调用它的 __call__
函数以退出系统。当你输入 exit
时,它被求值为同样的可调用对象,但不会调用它,而是将对象打印出来,从而调用对象上的 __repr__
函数。
我们可以通过将 __repr__
链接到 __call__
上来利用这一点,从而即使在没有括号的情况下输入 exit
,也能获得预期的退出系统行为。
exit
命令打印出 "helpful" 字符串,但是他们不能直接绑定它来执行自然的退出解释器操作。每次被迫输入括号很令人沮丧。这个答案很完美,应该成为被接受的答案。 - Przemek Dexit(2)
。
()
有关...否则,可能是一个变量...或某种对象... - summea