Azad Salahli
Azad Salahli

Reputation: 916

Why does input() give a SyntaxError when I just press enter?

In Python 2.6, when I try this code:

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

...

and just press Enter at the prompt, I get the following error:

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

Upvotes: 10

Views: 16634

Answers (4)

paxdiablo
paxdiablo

Reputation: 881193

For Python 2, you want raw_input, not input. The former will read a line. The latter will read a line and try to execute it, not advisable if you don't want your code being corrupted by the person entering data.

For example, they could do something like call arbitrary functions, as per the following example:

def sety99():
    global y
    y = 99

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

If you run that code under Python 2 and enter sety99(), the output will 99, despite the fact that at no point does your code (in its normal execution flow) purposefully set y to anything other than zero (it does in the function but that function is never explicitly called by your code). The reason for this is that the input(prompt) call is equivalent to eval(raw_input(prompt)).

See here for the gory details.

Keep in mind that Python 3 fixes this. The input function there behaves as you would expect.

Upvotes: 23

user225312
user225312

Reputation: 131597

If you use input on Python 2.x, it is interpreted as a Python expression, which is not what you want. And since in your case, the string is empty, an error is raised.

What you need is raw_input. Use that and it will return a string.

Upvotes: 2

dan04
dan04

Reputation: 90995

In Python 2.x, input() is equivalent to eval(raw_input()). And eval gives a syntax error when you pass it an empty string.

You want to use raw_input() instead.

Upvotes: 3

Tim Pietzcker
Tim Pietzcker

Reputation: 336108

In Python 2, input() strings are evaluated, and if they are empty, an exception is raised. You probably want raw_input() (or move on to Python 3).

Upvotes: 4

Related Questions