清理数字和小数的输入

时间:2017-01-07 17:36:39

标签: python python-3.x

我试图将一些用户输入清理为只有数字和小数点的有效浮点类型。

我发现了这种方法

def to_numeric(s):
    try:
        s = str(s).strip()
        if s is None or len(s) < 1:
            return None
        else:
            s = ''.join(filter(lambda x: x in '.0123456789', str(s)))
            if s is None or len(s) < 1:
                return None
            else:
                s = float(s)
                return s

    except ValueError as detail:        
        return None

    except Exception as detail:        
        return None

但是浮动的演员抱怨

  

float()参数必须是字符串或数字,而不是'filter'

如何从过滤器中取回字符串?

2 个答案:

答案 0 :(得分:3)

filter返回一个迭代,为该情况产生单个字符(它遍历字符串并产生可接受的字符)。尝试使用''.join让它们以字符串形式返回:

s = ''.join(filter(lambda x: x in '.0123456789', str(s)))
s = float(s)

答案 1 :(得分:0)

使用

s = float("".join(s))

而不是

s = float(s)

在Python 3中,filter返回一个迭代器,float期望str