2011-02-17 43 views
9

我有以下Python代碼:爲什麼input()在我按下回車鍵時出錯?

print 'This is a simple game.' 
input('Press enter to continue . . .') 
print 'Choose an option:' 

... 

但是,當我按下回車按鈕,我得到以下錯誤:

Traceback (most recent call last): 
    File "E:/4.Python/temp.py", line 2, in <module> 
    input('Press enter to continue . . .') 
    File "<string>", line 0 

^
SyntaxError: unexpected EOF while parsing 

附:我在Windows 7上使用Python IDLE 2.6版。

回答

22

對於Python 2,您需要raw_input而不是input。前者會讀出一行。後者將讀取一行並嘗試執行它,如果您不希望代碼被輸入數據的人破壞,則不可取。

例如,他們可以做一些事情,如呼叫任意函數,按照下面的例子:

def sety99(): 
    global y 
    y = 99 

y = 0 
input ("Enter something: ") 
print y 

如果你的Python 2下運行該代碼,並輸入sety99(),輸出將99,儘管在任何時候你的代碼(在其正常的執行流程中)都不會有意將y設置爲0以外的任何值(它在函數中執行,但該函數從未被代碼顯式調用過)。原因是input(prompt)呼叫相當於eval(raw_input(prompt))

查看here爲血淋淋的細節。

請記住,Python 3修復了這個問題。 input function there的行爲與您所期望的相同。

+0

+1例如:-) – user225312 2011-02-17 07:20:59

5

在Python 2中,對input()字符串進行求值,如果它們爲空,則會引發異常。你可能想要raw_input()(或轉到Python 3)。

4

在Python 2.x中,input()相當於eval(raw_input())。當你傳遞一個空字符串時,eval會給出一個語法錯誤。請使用raw_input()

2

如果您在Python 2.x上使用input,它會被解釋爲Python表達式,而這不是您想要的。而且由於你的情況,字符串是空的,會引發錯誤。

你需要的是raw_input。使用它,它會返回一個字符串。

相關問題