5

我正在尝试使用 NumPy 检查用户输入是否为数字。我试过使用:

import numpy as np

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

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

t 本身工作正常,但是当我将它嵌入到函数中时,例如在这种情况下:

import numpy as np

def test_this(a):   
    if np.isnan(a):
        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

3 回答 3

11

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

要进行您想做的那种输入检查,您不应该使用input(). 相反,使用raw_input(),try:将返回的字符串转换为 a 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."

正如@JF Sebastian 指出的那样,

input()确实eval(raw_input(prompt)),这很可能不是您想要的。

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

于 2011-12-14T16:13:28.080 回答
2

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

如评论和其他答案中所述,对 NaN 的检查与有效的用户数字输入无关 - 相反,它检查数字对象是否具有 Not a Number 的特殊值。

def check_if_numeric(a):
   try:
       float(a)
   except ValueError:
       return False
   return True
于 2011-12-14T16:17:50.653 回答
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,)
于 2011-12-14T16:14:18.947 回答