[Tutor] What's the difference between raw_input and input?

Brian van den Broek bvande at po-box.mcgill.ca
Mon Sep 20 20:36:42 CEST 2004


Dick Moores said unto the world upon 2004-09-20 14:12:
> Bob Gailer wrote at 09:00 9/20/2004:
> 
>> At 09:12 AM 9/20/2004, W X Liu wrote:
>>
>>> Hi all,
>>>
>>> Does anybody know What's the difference between raw_input and input?
>>
>>
>> Have you looked them up in the Python Reference? I suggest you do so. 
>> We like to help, but we hesitate to spend valuable time answering 
>> questions that can be easily looked up. If you do not understand what 
>> the reference says, come back and tell us what the problem is.
> 
> 
> The question made me realize I didn't know the difference either. My 
> attempts to get the answer turned up only this description of raw_imput():
> 
> ===============================
> raw_input( [prompt])
> 
> If the prompt argument is present, it is written to standard output 
> without a trailing newline. The function then reads a line from input, 
> converts it to a string (stripping a trailing newline), and returns 
> that. When EOF is read, EOFError is raised. Example:
> 
>  >>> s = raw_input('--> ')
> --> Monty Python's Flying Circus
>  >>> s
> "Monty Python's Flying Circus"
> 
> If the readline module was loaded, then raw_input() will use it to 
> provide elaborate line editing and history features.
> =================================
> 
> But nothing about input() in the "Python 2.3 Documentation" relevant to 
> the question. But I probably don't yet know my way perfectly around the 
> docs.
> 
> Dick Moores
> 


Hey Dick, W X Liu, and all,

To elaborate on what Olavi Ivask said up-thread and from the docs:

<docs>
input( [prompt])

Equivalent to eval(raw_input(prompt)). Warning: This function is not 
safe from user errors! It expects a valid Python expression as input; if 
the input is not syntactically valid, a SyntaxError will be raised. 
Other exceptions may be raised if there is an error during evaluation. 
(On the other hand, sometimes this is exactly what you need when writing 
a quick script for expert use.)
If the readline module was loaded, then input() will use it to provide 
elaborate line editing and history features.
Consider using the raw_input() function for general input from users.
</docs>

The point is that raw_input() returns a string obtained from the user, 
whereas input() evaluates (as in -- more or less -- runs) a string 
obtained from the user assuming it is valid Python code. The two 
pitfalls of input() pointed out are:

1) Exceptions are raised for non-well-formed Python expressions, and, 
more ominously,

2) Well formed Python expressions can wreak havoc. The user could, after 
all, type a string consisting of the Python expressions to delete all 
files from C:\Windows. IMHO, you certainly wouldn't want to give a 
script using input() to someone with enough knowledge to be dangerous 
and a habit of typing stuff "to see what happens".

I've yet to come across a situation where I'd want to use input(). And, 
even though I'm the only user of my scripts, I don't trust the 4am me 
enough to ask me(him?) for arbitrary code to execute. (Particularly 
since I now know enough to be dangerous.) This way lies tears ;-)

Best to all,

Brian vdB



More information about the Tutor mailing list