[Edu-sig] How to verify an integer or float string

Titu Kim kimtitu@yahoo.com
Thu, 4 Oct 2001 21:27:33 -0700 (PDT)


Thanks Kirby and Seth. I get more details than i
expect. Your replies are very helpful, especially for
the beginner like me.

Kim Titu
--- Kirby Urner <urnerk@qwest.net> wrote:
> At 11:02 AM 10/4/2001 -0700, Titu Kim wrote:
> >Hi,
> >    I am trying to verify a string is a legal
> integer
> >or float. Which method help me to do the job?
> Thanks a
> >lot
> >
> >Kim Titu
> 
> If you just want a true/false answer as to whether
> a string is a float or int, the code below will
> work.
> It only tries to convert to float, because all legal
> int strings, including longs, will also convert to
> floats.
> 
>    >>> def isintorfloat(thestring):
>           try:
>               thevalue = float(thestring)
>               return 1
>            except:
>              return 0
> 
> If you want to screen out long integers, then you
> need
> a slightly more complicated method, employing
> similar
> ideas.
> 
> Another approach, if you're not exposing your code
> to
> potentially malicious users over the web, is to use
> eval():
> 
>    >>> type(eval('12'))
>    <type 'int'>
>    >>> type(eval('12909023423423'))
>    <type 'long'>
>    >>> type(eval('1.0'))
>    <type 'float'>
> 
> So a function might be:
> 
>    >>> def isintorfloat(thestring):
>            try:
>                thevalue = eval(thestring)
>                if type(thevalue) == type(1):
>                    return (1,int(thestring))
>                elif type(thevalue) == type(1L):
>                    return (1,long(thestring))
>               elif type(thevalue) == type(1.0):
>                    return (1,float(thestring))
>                else:
>                    return (0,0)
>            except:
>                return (0,0)
> 
> This version not only catches the strings that
> aren't legal,
> it converts them, returning a tuple with 1 or 0 as a
> first
> element (true or false) and the converted string as
> the 2nd
> (but if the first is 0, then the 2nd defaults to 0
> and may
> be ignored).
> 
>     >>> isintorfloat('898989289823')
>     (1, 898989289823L)
>     >>> isintorfloat('8989892')
>     (1, 8989892)
>     >>> isintorfloat('8989892.0')
>     (1, 8989892.0)
>     >>> isintorfloat('8989892AAA')
>     (0, 0)
>     >>> isintorfloat('[1,2,3]')
>     (0, 0)
> 
> There are ways to make eval safer than shown.
> 
> Kirby
> 
> 
> _______________________________________________
> Edu-sig mailing list
> Edu-sig@python.org
> http://mail.python.org/mailman/listinfo/edu-sig


__________________________________________________
Do You Yahoo!?
NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month.
http://geocities.yahoo.com/ps/info1