2012-03-16 158 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提示。

退出()