如何解决这个python错误? OverflowError:无法将float无穷大转换为整数

时间:2010-05-16 18:23:47

标签: python

它给了我这个错误:

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 个答案:

答案 0 :(得分:3)

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

ALOT = 1e6
vals = [max(min(x, ALOT), -ALOT) for x in (valueWI, valueHI, valueWF, valueHF)]
dc.DrawLine(*vals)
当然,最好的方法是了解哪些值是无穷大,为什么 - 并解决这个问题。但是,这个优选的课程是非常依赖于应用程序的,并且完全取决于导致计算这些值的代码,你给我们绝对没有任何线索,所以我们很难为这个更好的选择提供非常具体的帮助! - )

答案 1 :(得分:3)

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

def round_int(x):
    if x == float("inf") or x == float("-inf"):
        return float('nan') # or x or return whatever makes sense
    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 :(得分:1)

你需要发布一些代码来获得明确的答案,但我猜你的浮动值之一是未设置的。因此它可以保存任何值,例如NaN(非数字),但在这种情况下,它设置为无穷大。这不能转换为整数,因此错误。

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