【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
float('nan')
结果为Nan(不是数字)。 但是,如何检查呢? 应该很容易,但是我找不到。
#1楼
好吧,我进入了这篇文章,因为我在功能上遇到了一些问题:
math.isnan()
运行此代码时出现问题:
a = "hello"
math.isnan(a)
它引发异常。 我的解决方案是再次进行检查:
def is_nan(x):
return isinstance(x, float) and math.isnan(x)
#2楼
我实际上只是碰到了这个,但是对我来说,它正在检查nan,-inf或inf。 我刚用过
if float('-inf') < float(num) < float('inf'):
这对于数字是正确的,对于nan和两个inf都是错误的,并且会为字符串或其他类型的东西引发异常(这可能是一件好事)。 同样,这不需要导入任何库,例如math或numpy(numpy是如此之大,它会使任何已编译应用程序的大小增加一倍)。
#3楼
如果卡在<2.6上,这是另一种方法,则没有numpy,并且没有IEEE 754支持:
def isNaN(x):
return str(x) == str(1e400*0)
#4楼
随着python <2.6我最终得到了
def isNaN(x):
return str(float(x)).lower() == 'nan'
这适用于Solaris 5.9框上的python 2.5.1和Ubuntu 10上的python 2.6.5
#5楼
我正在从Web服务接收数据,该服务将NaN
作为字符串'Nan'
。 但是我的数据中也可能存在其他类型的字符串,因此简单的float(value)
可能会引发异常。 我使用了以下可接受答案的变体:
def isnan(value):
try:
import math
return math.isnan(float(value))
except:
return False
需求:
isnan('hello') == False
isnan('NaN') == True
isnan(100) == False
isnan(float('nan')) = True
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3144022