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

aF.*_*aF. 8 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
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免这种情况发生?

Uki*_*cas 6

溢出错误:无法将浮点无穷大转换为整数

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
Run Code Online (Sandbox Code Playgroud)


Ale*_*lli 5

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

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

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