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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值