我在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函数将毫无用处。有人可以帮助我吗
提前致谢
答案 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
或其他内容。