如何修复这个Python错误? OverflowError:无法将浮点无穷大转换为整数

问题描述 投票:0回答:4

它给了我这个错误:

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

如何避免这种情况发生?

python
4个回答
13
投票

四个值

valueWI, valueHI, valueWF, valueHF
之一设置为浮动无穷大。 只需将其截断为合理的内容,例如,对于通用且完全本地的解决方案,请将您的
DrawLine
调用更改为:

ALOT = 1e6
vals = [max(min(x, ALOT), -ALOT) for x in (valueWI, valueHI, valueWF, valueHF)]
dc.DrawLine(*vals)

当然,最好的办法是了解哪个值是无穷大,以及为什么 - 并解决这个问题。 但是,这个优选的过程非常依赖于应用程序,并且完全取决于导致计算这些值的代码,而您完全没有给我们任何线索,因此我们很难就这个优选的选项提供非常具体的帮助!- )


10
投票

OverflowError:无法将浮点无穷大转换为整数

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

2
投票

您需要发布一些代码才能获得明确的答案,但我猜您的浮点值之一未设置。因此,它可以保存任何值,例如

NaN
(不是数字),但在本例中它设置为无穷大。这不能转换为整数,因此会出现错误。

它将被转换为整数,因为最终屏幕是一个整数空间(例如 1600 x 1200 像素)。


0
投票

如果您的循环位于 while 循环中,则无需再创建一个循环。你不能无限次数地执行无限的动作。换句话说,无穷大*无穷大是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.