NumPy - 使用isnan(x)

时间:2011-12-14 15:57:44

标签: python numpy notimplementedexception

我正在尝试使用numpy来检查用户输入是否为数字,我尝试过使用:

from numpy import *

a = input("\n\nInsert A: ")

if isnan(a) == True:
    print 'Not a number...'
else:
    print "Yep,that's a number"

单独使用它并且工作正常,但是当我将它嵌入到像这种情况下的函数中时:

来自numpy import *

def test_this(a):

    if isnan(a) == True:
        print '\n\nThis is not an accepted type of input for A\n\n'
        raise ValueError
    else:
        print "Yep,that's a number"

a = input("\n\nInsert A: ")

test_this(a)

然后我得到一个NotImplementationError,说它没有为这种类型实现,任何人都可以解释这是如何工作的?

任何帮助都将非常感谢并再次感谢。

4 个答案:

答案 0 :(得分:11)

“非数字”或“NaN”是根据IEEE-754标准的特殊浮点值。函数numpy.isnan()math.isnan()测试给定的浮点数是否具有此特殊值(或几个“NaN”值之一)。将除浮点数之外的任何内容传递给其中一个函数会产生TypeError

要进行您想要进行的输入检查,不应使用input()。相反,使用raw_input()try:将返回的字符串转换为float,如果失败则处理错误。

示例:

def input_float(prompt):
    while True:
        s = raw_input(prompt)
        try:
            return float(s)
        except ValueError:
            print "Please enter a valid floating point number."

作为@ J.F。塞巴斯蒂安指出,

  

input()eval(raw_input(prompt)),很可能不是你想要的。

或者为了更明确,raw_input传递一个字符串,一旦发送到eval将被评估和处理,就好像它是带有输入值的命令而不是输入字符串本身。

答案 1 :(得分:2)

检查用户输入是否是Python中的有效数字的最全面的方法之一是尝试将其转换为浮点值,并捕获异常。

如评论和其他答案所示,对NaN的检查与有效的用户数字输入无关 - 而是检查数字对象是否具有特殊值非数字。

def check_if_numeric(a):
   try:
       float(a)
   except ValueError:
       return False
   return True

答案 2 :(得分:0)

a = raw_input("\n\nInsert A: ")

try: f = float(a)
except ValueError:
     print "%r is not a number" % (a,)
else:
     print "%r is a number" % (a,)

答案 3 :(得分:0)

您可以直接检查输入类型:

a = input("\n\nInsert A: ")
num_types = ("int", "float", "long", "complex")

if type(a).__name__ in num_types
    print "Yep,that's a number"       
else:
    print '\n\nThis is not an accepted type of input for A\n\n'
    raise ValueError