退出python命令行

Exiting from python Command Line

要退出python命令行,我必须键入exit()。如果我键入exit,它会说

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

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


这对我很有效,是从python提示符中出来的最好方法。

exit()


在命令行中键入exit时,它会找到具有该名称的变量,并在该变量上调用__repr____str__。通常,您会得到如下结果:

1
<function exit at 0x00B97FB0>

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

例如,假设您正在调试程序中查看一些代码,其中一个对象引用了exit函数。当调试器试图调用该对象上的__repr__以向您显示该函数时,程序突然停止!这真的是出乎意料,而且应对措施可能会使事情进一步复杂化(例如,即使您将该行为限制在命令行中,如果您试图打印一些具有exit属性的对象呢?)


我建议您使用ctrl dakbd退出python解释器。这是用于文件结束或传输结束的旧ASCII代码。


此消息是exit__str__属性。

看看这些例子:

1
2
>>> print exit
Use exit() or Ctrl-D (i.e. EOF) to exit

1
2
>>> exit.__str__()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

1
2
>>> getattr(exit, '__str__')()
'Use exit() or Ctrl-D (i.e. EOF) to exit'

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

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


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

python的语法是这样的:exit本身不可能是对象的名称以外的任何东西。简单地引用一个对象实际上不能做任何事情(除了read eval打印循环通常做的事情,即显示对象的字符串表示)。


在Windows上使用Anaconda 4.5+和python 3.6+。

1
Ctrl+Z

1
exit()

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

1
Ctrl+Break

如果您的计算机没有Break键,请参见此处。


你可以解决这个问题。

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

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

这是怎么工作的?

python命令行是一个read-evaluate打印循环,也就是说,当您键入文本时,它将读取该文本,对其进行评估,并最终打印结果。

当您键入exit()时,它将评估为site.Quitter类型的可调用对象,并调用其退出系统的__call__函数。当您键入exit时,它的计算结果是同一个可调用对象,而不调用该对象,则会打印该对象,而该对象又在对象上调用__repr__

我们可以利用这一点,将__repr____call__连接起来,从而得到预期的退出SUSTEM的行为,即使我们在没有括号的情况下键入exit


要退出python终端,只需执行以下操作:

1
exit()

请注意,这是一个函数,大多数用户在不调用的情况下将其与exit混合调用,但是新的pyhton终端显示一条消息…

或者作为快捷方式,按:

1
Ctrl + D

在键盘上…

ctrl + D


如果您坚持使用python命令行,而上面的任何解决方案都不适合您,试试exit(2)


"exit"是可以在python程序中使用的有效变量名。当您试图查看该变量的值时,不希望退出解释器。