python 2.7 isnan() 函数无法使用

0 投票
3 回答
1445 浏览
提问于 2025-04-18 03:07

我在使用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

NaN 是用来表示在浮点数计算中不是数字的情况,比如说 0/0 或者负数的平方根。这种情况下,结果是无法定义的。你可以使用 isdigit 或者其他方法来处理这些情况。

3

当你对除了小数、'nan''-inf''inf'(或者这些字符串的稍微变体)以外的任何字符串使用 float() 函数时,会出现 ValueError 错误,因为其他任何东西都不是有效的浮点值。math.isnan() 只对特殊的浮点值 float('nan') 有效,但如果 float() 首先抛出异常,它就不会被调用。

可以使用异常处理来捕捉这个错误:

try:
    diceChoice = int(diceChoice))
except ValueError:
    print(diceChoice, 'is an invalid choice')

我使用了 int(),因为你的输入要求用户输入一个整数。

为了更清楚地说明:float('nan') 是一个特定的浮点值,用来表示某些数学运算的输出,而不是用来表示无效输入。

2

isnan() 这个函数主要是用来检查一个数字是否是无穷大或者不是一个有效的数字。你可以考虑用其他方法,比如:

if not diceChoice.isdigit():

出现错误是因为你试图把一个字符串转换成整数,比如用 float('a')。其实直接用上面的方式会更简单。

撰写回答