如何修复此Python错误?OverflowError:无法将浮点无限转换为整数
它给了我这个错误:
Traceback (most recent call last):
File "C:\Users\Public\SoundLog\Code\Código Python\SoundLog\Plugins\NoisePlugin.py", line 113, in onPaint
dc.DrawLine(valueWI, valueHI, valueWF, valueHF)
File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_gdi.py", line 3177, in DrawLine
return _gdi_.DC_DrawLine(*args, **kwargs)
OverflowError: cannot convert float infinity to integer
我该怎么做才能避免这个问题发生呢?
3 个回答
2
为了得到确切的答案,你需要发一些代码。不过我猜你的某个浮点数值没有被设置,所以它可能会有任何值,比如NaN
(不是一个数字),在这种情况下它被设置成了无穷大。这个值无法转换成整数,所以就出现了错误。
它会被转换成整数,因为最终屏幕是一个整数空间(比如1600 x 1200像素)。
9
这个错误信息的意思是:你试图把一个无限大的小数(float infinity)转换成一个整数(integer),但是这个转换是不允许的。
简单来说,计算机里有一种数叫做“无限大”,它表示一个非常非常大的数,超出了普通数字的范围。当你想把这个无限大的数变成一个整数时,计算机就会报错,因为没有办法把“无限大”变成一个具体的整数。
def round_int(x):
if x in [float("-inf"),float("inf")]: return float("nan")
return int(round(x))
# TEST
print(round_int(174.919753086))
print(round_int(0))
print(round_int(float("inf")))
print(round_int(float("-inf")))
175
0
nan
nan
13
在这四个值中,valueWI, valueHI, valueWF, valueHF
有一个被设置成了浮点数的无穷大。你可以把它截断成一个合理的数值,比如说,如果你想要一个通用且完全局部的解决方案,可以把你的 DrawLine
调用改成:
ALOT = 1e6
vals = [max(min(x, ALOT), -ALOT) for x in (valueWI, valueHI, valueWF, valueHF)]
dc.DrawLine(*vals)
当然,最好的办法是弄清楚哪个值是无穷大,以及为什么会这样——然后去修复它。但是,这个更好的方案非常依赖于具体的应用,完全取决于计算这些值的代码,而你并没有给我们任何线索,所以我们很难提供具体的帮助来实现这个更好的选项!-)