要退出python命令行,我必须键入exit()。如果我键入exit,它会说
1
| Use exit() or Ctrl-Z plus Return to exit |
通常,当您键入exit时,您会希望退出程序。当解释器知道我正试图退出命令行时,为什么会给出上述错误?为什么不直接退出?我知道这不重要,这是一个愚蠢的问题,但我很好奇。
- 它可能与函数在末尾通常如何使用()调用有关…否则,它可能是一个变量…或者某种物体…
- 对,但译员知道我正试图退出,这就是为什么要打印这个消息。否则它会打印一条错误消息。如果它知道我想退出,它就可以退出。
- exit或exit()为我抛出一个错误,大约20%的安装是我在世界上找到的…只有ctrl+z+return可以持续工作。
这对我很有效,是从python提示符中出来的最好方法。
exit()
号
在命令行中键入exit时,它会找到具有该名称的变量,并在该变量上调用__repr__或__str__。通常,您会得到如下结果:
1
| <function exit at 0x00B97FB0> |
。
但他们决定重新定义exit对象的函数,以显示有用的消息。这是否是一个愚蠢的行为,是一个主观的问题,但一个可能的原因,为什么它不"只是退出"是:
例如,假设您正在调试程序中查看一些代码,其中一个对象引用了exit函数。当调试器试图调用该对象上的__repr__以向您显示该函数时,程序突然停止!这真的是出乎意料,而且应对措施可能会使事情进一步复杂化(例如,即使您将该行为限制在命令行中,如果您试图打印一些具有exit属性的对象呢?)
- 在这种情况下,真正的exit函数甚至不在作用域内,除非您使用import sys,然后调用sys.exit()退出解释器。
我建议您使用ctrl dakbd退出python解释器。这是用于文件结束或传输结束的旧ASCII代码。
- 唯一对我有用的方法…
- 如果脚本出错,此方法似乎不起作用。
- Ctrl-Break在Windows中工作一致。Ctrl-D或Ctrl-Z在Windows中为python 2.7、3.4、3.6工作。但在python 3.7中,这些命令停止工作,退出的最短的ASCII序列是Ctrl-ZEnter。
此消息是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来检查这种行为。
- 那是来自活动的python。
- ctrl-z是您在Windows上所做的(好吧,DOS),在类似Unix的系统上,您可以在其中执行ctrl-d。
- @卡尔克内切特尔啊,很高兴知道。我在Windows上的编程经验很少。
因为解释器不是您提供命令的shell,所以它是一个解释器。您提供给它的是Python代码。
python的语法是这样的:exit本身不可能是对象的名称以外的任何东西。简单地引用一个对象实际上不能做任何事情(除了read eval打印循环通常做的事情,即显示对象的字符串表示)。
在Windows上使用Anaconda 4.5+和python 3.6+。
或
。
在某些情况下,您可能需要使用
如果您的计算机没有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。
- 他们努力让exit打印出"有用"的字符串,但他们不能简单地把它绑定起来做自然的事情,然后退出解释器。每次被迫打括号都让人沮丧。这个答案是完美的,应该是被接受的答案。
要退出python终端,只需执行以下操作:
。
请注意,这是一个函数,大多数用户在不调用的情况下将其与exit混合调用,但是新的pyhton终端显示一条消息…
或者作为快捷方式,按:
。
在键盘上…
。
如果您坚持使用python命令行,而上面的任何解决方案都不适合您,试试exit(2)。
"exit"是可以在python程序中使用的有效变量名。当您试图查看该变量的值时,不希望退出解释器。
- 除非您分配给exit,否则您将覆盖此符号,并且exit()将不再工作。虽然这个符号是一个有效的变量名,但以这种方式使用它似乎不是一个很好的实践。