2012-03-16 161 views
76

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

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

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

+0

它可能有怎样的功能往往与所谓的做'()'末...否则,它可能(可能)是一个变量...或某种对象... – summea 2012-03-16 00:59:23

+0

正确,但解释者知道我正在尝试退出,这就是为什么打印该消息。否则会打印出错误信息。如果它知道我想退出,它可以退出。 – Ank 2012-03-16 01:00:56

回答

27

当您在命令行中键入exit时,它会找到具有该名称的变量并在其上调用__repr__(或__str__)。通常情况下,你会得到这样的结果:

<function exit at 0x00B97FB0> 

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

假设你在调试器中查找一些代码,例如其中一个对象引用了exit函数。当调试器试图在该对象上调用__repr__以向您显示该功能时,程序突然停止!这实际上是意想不到的,并且采取措施可能会进一步使事情复杂化(例如,即使将此行为限制在命令行中,如果您尝试打印某些具有exit作为属性的对象又会怎样?)

+3

在这种情况下,真正的退出函数甚至不在范围内,除非您导入sys,之后您可以调用sys.exit()来退出解释器。 – 2012-03-16 03:18:51

13

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

+0

唯一适用于我的方法... – 2015-11-20 13:18:20

+0

如果脚本遇到错误,看起来像这种方法不起作用。 – blaylockbk 2016-12-06 20:55:04

7

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

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

+1

这是来自Active Python。 – Ank 2012-03-16 01:04:03

+4

Ctrl-Z是你在Windows(或DOS)上做什么的地方,你可以在类Unix系统上做Ctrl-D。 – 2012-03-16 01:10:49

+0

@KarlKnechtel嗯,很高兴知道。我几乎没有在Windows上编程的经验。 – Dunes 2012-03-16 01:15:52

16

此消息是的exit

看看这些实施例的__str__属性:

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

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

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

27

这对我来说是最好的方式来出来的python提示。

退出()