input() on python 2.7.5 vs 3.3.2

Discussion in 'Python' started by stephen.boulet@gmail.com, Dec 12, 2013.

  1. Guest

    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
     
    , Dec 12, 2013
    #1
    1. Advertising

  2. On Fri, Dec 13, 2013 at 1:45 AM, <> 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
     
    Chris Angelico, Dec 12, 2013
    #2
    1. Advertising

  3. On 12/12/2013 14:56, Amit Saha wrote:
    > On Fri, Dec 13, 2013 at 12:45 AM, <> 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
     
    Mark Lawrence, Dec 12, 2013
    #3
  4. On Fri, Dec 13, 2013 at 2:04 AM, Mark Lawrence <> 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
     
    Chris Angelico, Dec 12, 2013
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Weng Tianxiang
    Replies:
    12
    Views:
    1,636
  2. ashutosh
    Replies:
    3
    Views:
    9,001
    Andrew Thompson
    Jun 16, 2005
  3. Guy
    Replies:
    5
    Views:
    2,831
    brucie
    Dec 13, 2003
  4. cjl
    Replies:
    1
    Views:
    10,503
    Michael Winter
    Oct 31, 2005
  5. Chris Carlen
    Replies:
    1
    Views:
    625
    Gabriel Genellina
    Sep 18, 2007
Loading...

Share This Page