2011-02-17 98 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。使用它,它会返回一个字符串。

相关问题