python判断字符是否可转换为float类型

 

前一段时间做了个项目,期间遇到个之前一直忽略的问题。怎么有效的判断一个字符是否可以转化为float类型。

很简单粗暴的想法如下:

def isFloat(x):
    try:
        float(x)
        return True
    except:
        return False
    

 我擦,下面这些字符都是返回True;作为一个新手,真难受!

原来 'inf', 'infinity', 'INF', 'INFINITY', True, 'NAN', 'nan', False, '-inf', '-INF', '-INFINITY', '-infinity', 'NaN', 'Nan'  .... 都能float;但是实在需求中这些都是不满足要求的!!!

同时,也要注意False 和 0 ,True 和 1 之间的关系!

isFloat('Nan')
Out[260]: True
isFloat('Infinity')
Out[261]: True
isFloat(True)
Out[262]: True
isFloat('INFINITY')
Out[263]: True
isFloat('-infinity')
Out[264]: True
isFloat('-INF')
Out[265]: True
isFloat('-inf')
Out[266]: True
isFloat('nan')
Out[267]: True
isFloat('NaN')
Out[268]: True
isFloat('inf')
Out[269]: True
isFloat(False)
Out[281]: True

看来要有效判断一个字符串是否可以转化为数值float,需要将上述这些“异常”情况排除,这里就没穷举所有情况了;

同时,用正则表达式也是一个不错的方式!

def isFloat(x):
    try:
        float(x)
        if str(x) in ['inf', 'infinity', 'INF', 'INFINITY', 'True', 'NAN', 'nan', 'False', '-inf', '-INF', '-INFINITY', '-infinity', 'NaN', 'Nan']:
            return False
        else:
            return True
    except:
        return False

 

如需转载请注明出处  谢谢! 

你可能感兴趣的:(python判断字符是否可转换为float类型)