2010-05-16 147 views
3

它給了我這個錯誤:我怎樣才能避免這種情況發生如何解決這個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 

+0

簡單的答案:不通過無限進入DrawLine的功能。 – 2010-05-16 18:29:04

回答

3

將四個值valueWI, valueHI, valueWF, valueHF中的一個設置爲float infinity。只要將其截斷爲合理的東西,例如,對於一般,完全本地解決方案,您的通話DrawLine改變:

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

最好的,當然是要了解其數值是無窮大的,爲什麼 - 並解決這個問題。但是,這個更好的過程是非常依賴於應用程序的,完全依賴於導致計算這些值的代碼,而這些代碼我們完全不知道,所以我們很難爲這個更好的選項提供非常具體的幫助! )

+0

你是蟒王;) 今天是兩個兩個! Thanks m8 – 2010-05-16 19:20:18

1

你需要發佈一些代碼才能得到明確的答案,但我猜想你的一個float值是未設置的。因此它可以保存任何值,如NaN(不是數字),但在這種情況下,它被設置爲無窮大。這不能轉換爲整數,因此錯誤。

它將被轉換爲整數,因爲最終屏幕是整數空間(例如1600 x 1200像素)。

1

OverflowError:不能轉換浮動無窮整數

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 
相關問題