Pythonic way to determine if a string is a number

Nick Craig-Wood nick at craig-wood.com
Mon Feb 16 22:31:55 CET 2009


python at bdurham.com <python at bdurham.com> wrote:
>  Thanks for everyone's feedback. I believe my original post's code
>  (updated following my signature) was in line with this list's feedback.
> 
>  Christian: Thanks for reminding me about exponential formats. My updated
>  code accounts for these type of numbers. I don't need to handle inf or
>  nan values. My original code's except catches an explicit ValueError
>  exception per your concern about bare excepts.
> 
>  Malcolm
> 
> <code>
>  # str_to_num.py
> 
>  def isnumber( input ):
>      try:
>          num = float( input )
>          return True
> 
>      except ValueError:
>          return False

That is a fine solution.

Last time I had to solve this I had a specific format of number to
parse - I didn't want to include all the python formats.  This is what
I came up with...  This particular code returns the converted number
or 0.0 - adjust as you see fit!

import re

_float_pattern   = re.compile(r"^\s*([-+]?(\d*\.)?\d+([eE][-+]?\d+)?)")

def atof(value):
    """
    Convert a string to an float in the same way the c-library atof()
    does.  Ie only converting as much as it can and returning 0.0 for
    an error.
    """
    match = _float_pattern.search(value)
    if match:
        return float(match.group(1))
    return 0.0

>>> atof("15.5 Sausages")
15.5
>>> atof("   17.2")
17.199999999999999
>>> atof("0x12")
0.0
>>> atof("8.3.2")
8.3000000000000007
>>> atof("potato")
0.0
>>>

-- 
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick



More information about the Python-list mailing list