python 2.7 isnan()函数不起作用

时间:2014-04-17 14:22:40

标签: python python-2.7 nan

我在python中遇到了数学的.isnan()函数。差不多,我有这个代码:

import math        
diceChoice = raw_input('Which dice will you throw?\n 4 sides\n 6 sides\n 12 sides?\n>')

if math.isnan(float(diceChoice)):
    print(str(diceChoice) + ' is an invalid choice')

如果diceChoice不是一个数字(例如' a'),它会给我一个错误:

ValueError: could not convert string to float: a

如果我不将它转换为浮动,它会给我另一个错误,说它需要是一个浮点数。我必须做错事,因为如果只接受数字,isnan函数将毫无用处。有人可以帮助我吗

提前致谢

3 个答案:

答案 0 :(得分:3)

除了十进制数字float()'nan''-inf'(或这些字符串的轻微变体)之外的任何其他字符串上使用的'inf'函数将抛出{ {1}}而是因为其他任何内容是有效的浮点值。 ValueError仅适用于特殊浮点值math.isnan(),但如果float('nan')首先引发异常,则不会调用它。

使用异常处理来捕获该错误:

float()

我之所以使用try: diceChoice = int(diceChoice)) except ValueError: print(diceChoice, 'is an invalid choice') ,是因为您的输入要求用户输入整数。

只是为了明确:int()是一个特定的浮点值,用于表示某些非异常的数学运算的输出。它从未用于表示无效输入。

答案 1 :(得分:2)

isnan()实际上仅用于检查数字是否具有有限值。考虑做一些类似的事情:

if not diceChoice.isdigit():

引发错误的原因是您尝试将字符串转换为float('a')的整数。更容易做到以上。

答案 2 :(得分:0)

NaN用于定义不是像0/0这样的浮点上下文中的数字或者例如负数的平方根。您可以使用isdigit或其他内容。