前一段时间做了个项目,期间遇到个之前一直忽略的问题。怎么有效的判断一个字符是否可以转化为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
如需转载请注明出处 谢谢!