Как получить NaN, когда я делюсь на ноль
Когда я делаю деление с плавающей запятой в Python, если я делю на ноль, я получаю исключение:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
Мне бы хотелось получить вместо NaN
или Inf
(потому что NaN
или Inf
будет корректно распространяться по остальным моим вычислениям и не убивать мою программу).
Как я могу это сделать?
Ответы
Ответ 1
Самый простой способ получить это поведение - использовать numpy.float64
вместо Python по умолчанию float
type:
>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf
Конечно, для этого требуется NumPy. Вы можете использовать numpy.seterr()
для точной настройки обработки ошибок.
Ответ 2
Метод 1:
try:
value = a/b
except ZeroDivisionError:
value = float('Inf')
Метод 2:
if b != 0:
value = a / b
else:
value = float('Inf')
Но имейте в виду, что значение также может быть -Inf
, поэтому вы должны сделать более отличительный тест. Тем не менее, это выше должно дать вам идею, как это сделать.
Ответ 3
Вы можете попробовать использовать десятичный модуль:
>>> from decimal import *
>>> setcontext(ExtendedContext)
>>> inf = Decimal(1) / Decimal(0)
>>> print(inf)
Infinity
>>> neginf = Decimal(-1) / Decimal(0)
>>> print(neginf)
-Infinity
>>> print(neginf + inf)
NaN
>>> print(neginf * inf)
-Infinity
>>> print(dig / 0)
Infinity
Ответ 4
Если я правильно понимаю вашу проблему, это должно быть решением:
try:
1.0/0.0
except:
return 'inf'
вы можете изменить его в соответствии с доступным методом обработки исключений python
Ответ 5
Я использовал функцию-оболочку в моей программе python для простого деления, которое возвращало ZeroDivisionError, когда датчики, которые я использовал, не были подключены. Он просто возвращает 0 (ноль), что в реальных условиях - это то, что Я хотел. Вероятно, становится беспорядочным с большим количеством переменных, однако...
def calculation(a, b):
if a == 0:
return 0
elif b == 0:
return 0
else:
return a/b