Как исправить эту ошибку Python? OverflowError: невозможно преобразовать бесконечность с плавающей точкой в ​​целое число - PullRequest
6 голосов
/ 16 мая 2010

это дает мне эту ошибку:

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 ]

3 голосов
/ 16 мая 2010

Одно из четырех значений valueWI, valueHI, valueWF, valueHF установлено на бесконечность с плавающей запятой. Просто обрежьте его до чего-то разумного, например, для общего и полностью локального решения, измените ваш DrawLine вызов на:

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

Лучше всего, конечно, понять, какое из значений является бесконечностью, а почему - и исправить это. Но этот предпочтительный курс сильно зависит от приложения и полностью зависит от кода, приводящего к вычислению этих значений, о котором вы абсолютно не догадываетесь, поэтому нам сложно предложить очень конкретную помощь по этому предпочтительному варианту! )

3 голосов
/ 16 декабря 2016

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
1 голос
/ 16 мая 2010

Вам понадобится опубликовать некоторый код, чтобы получить окончательный ответ, но я предполагаю, что одно из ваших значений с плавающей запятой не установлено.Таким образом, он может содержать любое значение, например NaN (не число), но в этом случае он установлен на бесконечность.Это не может быть приведено к целому числу, следовательно, ошибка.

Это будет приведено к целому числу, поскольку в конечном итоге экран представляет собой целое пространство (например, 1600 x 1200 пикселей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...