如何修复此Python错误?OverflowError:无法将浮点无限转换为整数

15 投票
3 回答
93580 浏览
提问于 2025-04-15 22:46

它给了我这个错误:

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)

当然,最好的办法是弄清楚哪个值是无穷大,以及为什么会这样——然后去修复它。但是,这个更好的方案非常依赖于具体的应用,完全取决于计算这些值的代码,而你并没有给我们任何线索,所以我们很难提供具体的帮助来实现这个更好的选项!-)

撰写回答