Input Types
Jeff Epler
jepler at unpythonic.net
Sat May 15 10:06:43 EDT 2004
Here's a function that can do the job.
def typed_input(prompt="", convert=int, catch=ValueError,
eprompt="Invalid input."):
while 1:
s = raw_input(prompt)
try:
return convert(s)
except catch:
print eprompt
Usage:
>>> typed_input("Enter an integer: ")
Enter an integer: asdf
Invalid input
Enter an integer: 3
3
>>> typed_input("Enter a number: ", float)
Enter a number:
Invalid input
Enter a number: 3.14
3.1400000000000001
How does it work?
1. The "while 1" loop is repeated until the "return" statement is
successfully executed.
2. int(s) and float(s) convert a string argument s to the specified
type, or raise the ValueError exception
3. When there is a ValueError exception, the "error prompt" is printed,
and the while loop returns to the top to try again.
You can also write your own "convert" function to restrict values to a
range, etc:
>>> def int_0_100(s):
... i = int(s)
... if i < 0 or i > 100:
... raise ValueError # out of range
... return i
...
>>> typed_input("Enter a number from 0 to 100: ", int_0_100)
Enter a number from 0 to 100: asdf
Invalid input.
Enter a number from 0 to 100: 101
Invalid input.
Enter a number from 0 to 100: 37
37
You can also specify the catch= or eprompt= arguments to change the
exception that is caught or the error prompt string.
Jeff
More information about the Python-list
mailing list