【问题标题】:python 2.7 isnan() function not workingpython 2.7 isnan() 函数不起作用
【发布时间】:2014-06-01 21:07:51
【问题描述】:

我对 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 函数只接受数字,它将毫无用处。有人可以帮我吗

提前致谢

【问题讨论】:

  • 提示输入时您在输入什么?
  • 我只是在输入字母a

标签: python python-2.7 nan


【解决方案1】:

float() 函数用于除十进制数以外的任何其他字符串、'nan''-inf''inf'(或这些字符串的轻微变体)将抛出一个 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') 将字符串转换为整数。更容易做到以上几点。

    【讨论】:

    • @iiaMOsaamax 很好,很高兴能帮上忙。如果我的回答对你有帮助,你介意采纳吗?您可以通过单击投票计数下方的勾号来做到这一点,使其保持绿色。谢谢你。尽管您需要等待大约 15 分钟才能通过宽限期。 :)
    【解决方案3】:

    NaN 用于定义浮点上下文中不是数字的事物,例如 0/0 或负数的平方根。您可以使用isdigit 或其他方式。

    【讨论】:

      猜你喜欢
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多