Python's input()
treats input as Python code - it is essentially taking raw_input()
, sending it to eval()
and then returning the result. This means that if you want to treat input as a string, you need to enter it surrounded with quotes. If you enter text surrounded with quotes, input()
attempts to treat that text as Python code. Here are some examples (copy-pasted from my Python REPL):
Using input()
:
>>> a = input("enter something: ") # treats input as Python code
enter something: 4 # will evaluate as the integer 4
>>> type(a)
<type 'int'> # type of 4 is an integer
>>> a = input("enter something: ") # treats input as Python code
enter something: this is a string # will result in an error
File "<stdin>", line 1, in <module>
File "<string>", line 1
this is a string
^
SyntaxError: unexpected EOF while parsing
>>> a = input("enter something: ") # treats input as Python code
enter something: "this is a string" # "this is a string" wrapped in quotes is a string
>>> type(a)
<type 'str'> # a is the string "this is a string"
Using raw_input()
:
>>> a = raw_input("enter something: ") # treats all input as strings
enter something: this is a string
>>> type(a)
<type 'str'> # a is the string "this is a string"
>>> print(a)
this is a string
>>> a = raw_input("enter something: ") # treats all input as strings
enter something: "this is a string"
>>> type(a)
<type 'str'> # a is the string ""this is a string""
>>> print(a)
"this is a string"
>>> a = raw_input("enter something: ") # treats all input as strings
enter something: 4
>>> type(a)
<type 'str'> # a is the string "4"
This also means that the calls to eval()
are unnecessary if you use input()
.
I'd use raw_input()
so that the user can enter input without quotation marks, and continue using eval()
as you are now.