[Tutor] Most pythonic input validation
Wayne Werner
waynejwerner at gmail.com
Thu Oct 15 18:14:09 CEST 2009
On Thu, Oct 15, 2009 at 10:50 AM, Rich Lovely <roadierich at googlemail.com>wrote:
> 2009/10/15 Wayne Werner <waynejwerner at gmail.com>:
> > Hi,
> > I'm writing a text based menu and want to validate the user input. I'm
> > giving the options as integers, and I want to make sure the user enters a
> > proper value.
> > Here's what I've got so far: http://pastebin.com/m1fdd5863
> > I'm most interested in this segment:
> > while True:
> > choice = raw_input(prompt)
> > if valid_choice(choice, 0, len(options)-1):
> > break
> > return choice
> > Is that the most pythonic way of validating? Is there a better way?
> > As an aside, in the valid_choice function I know I could do:
> > if not choice in range(min, max)
> > but I figured a comparison would probably be the better choice, correct?
> > Thanks,
> > Wayne
> > --
> > To be considered stupid and to be told so is more painful than being
> called
> > gluttonous, mendacious, violent, lascivious, lazy, cowardly: every
> weakness,
> > every vice, has found its defenders, its rhetoric, its ennoblement and
> > exaltation, but stupidity hasn’t. - Primo Levi
> >
> > _______________________________________________
> > Tutor maillist - Tutor at python.org
> > To unsubscribe or change subscription options:
> > http://mail.python.org/mailman/listinfo/tutor
> >
> >
>
> The most pythonic way would be to use a try except block:
>
> while True:
> choice = raw_input(prompt)
> try:
> options[int(choice)]
> except (KeyError, IndexError, TypeError):
> print "Invalid input, try again."
> continue
> return choice
>
Ah, that's much cleaner, I like it :)
yeah, I noticed right after I had sent my email that I forgot to convert it
to an int. Though I do believe (and checking confirms) it's ValueError on an
int() fail:
ValueError: invalid literal for int() with base 10: 'asdf'
Now I can eliminate a function, so that's helpful :)
Thanks,
Wayne
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20091015/9e287507/attachment-0001.htm>
More information about the Tutor
mailing list