f



input() on python 2.7.5 vs 3.3.2

Can someone explain? Thanks.

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> x = input()
Hello there
>>> print(x)
Hello there

Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> x = input()
Hello there
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    Hello there
              ^
SyntaxError: unexpected EOF while parsing
0
stephen
12/12/2013 2:45:17 PM
comp.lang.python 77058 articles. 6 followers. Post Follow

4 Replies
770 Views

Similar Articles

[PageSpeed] 11

On Fri, Dec 13, 2013 at 1:45 AM,  <stephen.boulet@gmail.com> wrote:
> Can someone explain? Thanks.
>
> Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> x = input()
> Hello there
>>>> print(x)
> Hello there
>
> Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> x = input()
> Hello there
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "<string>", line 1
>     Hello there
>               ^
> SyntaxError: unexpected EOF while parsing

It's very simple: The input() function in Python 2.x is a very
dangerous one - it's equivalent to eval(input()) in Python 3. The
equivalent function in Python 2 is called raw_input. For safety and
compatibility, just do this at the beginning of your interactive
session or the top of your script:

input = raw_input

or, in a way that'll work in Python 3 as well, with no changes:

try:
    input = raw_input
except NameError:
    pass

After that, you can safely call input() and get back a string.

ChrisA
0
Chris
12/12/2013 2:53:34 PM
On Fri, Dec 13, 2013 at 12:45 AM,  <stephen.boulet@gmail.com> wrote:
> Can someone explain? Thanks.
>
> Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> x = input()
> Hello there
>>>> print(x)
> Hello there

In Python 3, input() considers an input as a string and returns the
input as a string. This is the behavior of raw_input() in Python 2.

>
> Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> x = input()
> Hello there
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "<string>", line 1
>     Hello there
>               ^
> SyntaxError: unexpected EOF while parsing

In Python 2, input() expects valid Python as it's input. If you
provide your input as 'Hello there' (a  Python string), it won't
complain.

HTH,
Amit.


-- 
http://echorand.me
0
Amit
12/12/2013 2:56:09 PM
On 12/12/2013 14:56, Amit Saha wrote:
> On Fri, Dec 13, 2013 at 12:45 AM,  <stephen.boulet@gmail.com> wrote:
>> Can someone explain? Thanks.
>>
>> Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> x = input()
>> Hello there
>>>>> print(x)
>> Hello there
>
> In Python 3, input() considers an input as a string and returns the
> input as a string. This is the behavior of raw_input() in Python 2.
>
>>
>> Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
>> Type "help", "copyright", "credits" or "license" for more information.
>>>>> x = input()
>> Hello there
>> Traceback (most recent call last):
>>    File "<stdin>", line 1, in <module>
>>    File "<string>", line 1
>>      Hello there
>>                ^
>> SyntaxError: unexpected EOF while parsing
>
> In Python 2, input() expects valid Python as it's input. If you
> provide your input as 'Hello there' (a  Python string), it won't
> complain.
>
> HTH,
> Amit.
>

I much prefer Chris Angelico's response "The input() function in Python 
2.x is a very dangerous one - it's equivalent to eval(input()) in Python 3."

-- 
My fellow Pythonistas, ask not what our language can do for you, ask 
what you can do for our language.

Mark Lawrence

0
Mark
12/12/2013 3:04:39 PM
On Fri, Dec 13, 2013 at 2:04 AM, Mark Lawrence <breamoreboy@yahoo.co.uk> wrote:
> I much prefer Chris Angelico's response "The input() function in Python 2.x
> is a very dangerous one - it's equivalent to eval(input()) in Python 3."

Just to clarify: If you *want* eval, then you know you want it, and
you are (or should be) aware of its dangers. The problem, imo, is
hiding something as powerful and dangerous as code evaluation behind
the innocuous name "input". If I were coding a Python 2.x REPL, I
would probably write eval(raw_input()) rather than input(), just for
clarity.

But I'm more likely to just code for Python 3 anyway. :)

ChrisA
0
Chris
12/12/2013 3:17:52 PM
Reply: