从 python 命令行退出

要从 Python 命令行退出,我必须输入 exit ()

Use exit() or Ctrl-Z plus Return to exit

通常当您键入 exit时,您希望退出程序。当解释器知道我正试图退出命令行时,它为什么给我上面的错误?为什么不直接跳出来?我知道这不重要,这是一个愚蠢的问题,但我很好奇。

357231 次浏览

我建议您使用 Ctrl-D退出 Python 解释器。这是用于文件结束或传输结束的旧 ASCII 代码。

在我的 python 解释器中,exit实际上是一个字符串,而不是一个函数—— 'Use Ctrl-D (i.e. EOF) to exit.'。您可以通过输入 type(exit)来检查您的解释器

在活动的 python 中,exit 是一个函数。如果不调用该函数,它将打印出对象的字符串表示形式。这是所有返回对象的默认行为。只是设计人员认为人们可能会尝试键入 exit 以退出解释器,所以他们使 exit 函数的字符串表示成为一个有用的信息。您可以通过键入 str(exit)甚至 print exit来检查这种行为。

此消息是 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__(或 __str__)。通常,你会得到这样的结果:

<function exit at 0x00B97FB0>

但是他们决定为 exit对象重新定义该函数,以显示有用的消息。这是否是一种愚蠢的行为,是一个主观的问题,但它不“退出”的一个可能的原因是:

例如,假设您正在调试器中查看某些代码,并且其中一个对象引用了 exit函数。当调试器试图调用该对象上的 __repr__来向您显示该函数时,程序突然停止!这真的是出乎意料之外,而且计数的方法可能会使事情变得更加复杂(例如,即使您将这种行为限制在命令行中,如果您试图打印一些具有 exit作为属性的对象会怎么样呢?)

因为解释器不是提供命令的 shell,而是一个解释器。您给它的是 Python 代码。

Python 的语法使得 exit本身只能是对象的名称。简单地引用一个对象实际上不能做任何事情(除了"读取-求值-输出"循环通常做的事情,即显示对象的字符串表示)。

这对我来说很有用,最好的方法来走出 python 提示符。

出口()

你能搞定的。

使用以下命令将 PYTHONSTARTUP链接到一个 python 文件

# Make exit work as expected
type(exit).__repr__ = type(exit).__call__

这是怎么回事?

Python 命令行是读取-计算-打印-循环,也就是说,当您键入文本时,它将读取该文本,计算它,并最终打印结果。

当您键入 exit()时,它将计算为类型为 site.Quitter的可调用对象,并调用其退出系统的 __call__函数。当您键入 exit时,它将计算为相同的可调用对象,而不调用它,该对象将被打印,然后对该对象调用 __repr__

我们可以通过将 __repr__连接到 __call__来利用这一点,从而获得退出系统的预期行为,即使在输入没有括号的 exit时也是如此。

如果您停留在 python 命令行中,并且上述解决方案都不适合您, 试试 exit(2)

“ exit”是可以在 Python 程序中使用的有效变量名。如果您只是想查看变量的值,那么您不会希望退出解释器。

要退出 巨蟒终端,只要做:

exit()

请注意,这是一个功能,调用为大多数用户混合出口没有呼叫,但 Pyhton 终端显示一条消息..。

或者作为一条捷径,按:

Ctrl + D

在你的键盘上。

ctrl + D

在 Windows 上使用 Anaconda 4.5 + 和 Python 3.6 +

Ctrl+Z

或者

exit()

在某些情况下,您可能需要使用

Ctrl+Break

如果您的计算机没有 Break键,那么 看这里

Python 中的用户体验:

$ python
Python 3.10.5 (tags/v3.10.5:f377153, Jun  6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
>>> ^D
File "<stdin>", line 1
♦
^
SyntaxError: invalid syntax
>>> exit
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'exit' is not defined
>>> quit
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'quit' is not defined
>>> exit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'exit' is not defined
>>> quit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'quit' is not defined