我正在尝试使用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,说它没有为这种类型实现,任何人都可以解释这是如何工作的?
任何帮助都将非常感谢并再次感谢。
答案 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