如何检查NaN值?

亡梦爱人 提交于 2019-12-17 16:07:02

【推荐】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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!