要从Python命令行退出,我必须键入exit()。如果我输入exit,它会说
Use exit() or Ctrl-Z plus Return to exit
通常,当您键入时exit,您想退出该程序。当解释程序知道我要退出命令行时,为什么会给我上述错误?为什么不退出呢?我知道这并不重要,这是一个愚蠢的问题,但我很好奇。
要从Python命令行退出,我必须键入exit()。如果我输入exit,它会说
Use exit() or Ctrl-Z plus Return to exit
通常,当您键入时exit,您想退出该程序。当解释程序知道我要退出命令行时,为什么会给我上述错误?为什么不退出呢?我知道这并不重要,这是一个愚蠢的问题,但我很好奇。
Answers:
在我的python解释器exit中,实际上是一个字符串而不是一个函数- 'Use Ctrl-D (i.e. EOF) to exit.'。您可以输入以下内容来检查口译员type(exit)
在活动的python中,正在发生的事情是exit是一个函数。如果不调用该函数,它将打印出对象的字符串表示形式。这是返回的任何对象的默认行为。只是设计人员认为人们可能会尝试键入exit退出解释器,因此他们使exit函数的字符串表示形式很有帮助。您可以通过键入str(exit)甚至来检查此行为print exit。
exit在命令行中键入时,它将查找具有该名称的变量并在其上调用__repr__(或__str__)。通常,您会得到如下结果:
<function exit at 0x00B97FB0>
但是他们决定为该exit对象重新定义该功能,以显示一条有用的消息。这是否是一个愚蠢的行为,是一个主观的问题,但它不“只是退出”的一个可能原因是:
例如,假设您正在调试器中查看一些代码,并且其中一个对象引用了该exit函数。当调试器尝试调用__repr__该对象以向您显示该功能时,该程序突然停止!这真的是出乎意料的,并且采取应对措施可能会使事情进一步复杂化(例如,即使将行为限制为命令行,如果尝试打印具有exit属性的对象该怎么办?)
import sys您将调用sys.exit()退出解释器。
我建议您使用退出Python解释器Ctrl-D。这是文件结束或传输结束的旧ASCII码。
Ctrl-Break在Windows中一致地工作。Ctrl-D或Ctrl-Z在Windows中使用Python 2.7、3.4、3.6。但是在Python 3.7中,这些命令停止了工作,退出的最短ASCII序列是Ctrl-Z Enter。
在Windows上与Anaconda 4.5+和Python 3.6+一起使用
Ctrl+Z
要么
exit()
在某些情况下,您可能必须使用
Ctrl+Break
如果您的计算机没有Break钥匙,请参见此处。
您可以解决该问题。
PYTHONSTARTUP使用以下链接到python文件
# Make exit work as expected
type(exit).__repr__ = type(exit).__call__
这是如何运作的?
python命令行是一个read-evaluate-print-loop,也就是说,当您键入文本时,它将读取该文本,对其进行评估并最终打印结果。
键入时,exit()它将求值为类型的可调用对象,site.Quitter并调用其__call__退出系统的函数。键入时,exit它求值到相同的可调用对象,而不调用它,则将打印该对象,从而依次调用__repr__该对象。
我们可以通过链接__repr__来利用这一点__call__,从而获得预期的退出系统的行为,即使我们键入时exit不带括号也是如此。
exit打印成为“有用的”字符串,但他们不能仅仅将其绑定以执行自然操作并退出解释器。每次都被迫键入括号令人沮丧。这个答案是完美的,应该被接受。
如果您陷在python命令行中,但以上解决方案均不适合您,请尝试 exit(2)
()在最后调用函数的方式有关...否则,它可能(可能)是变量...或某种对象...