当我除以零时如何获得NaN

时间:2012-04-04 13:05:01

标签: python

当我在Python中进行浮点除法时,如果我除以零,我得到一个例外:

>>> 1.0/0.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: float division

我真的希望得到NaNInf(因为NaNInf会在我的计算中正确传播并且不会杀死我的程序)。

我该怎么做?

5 个答案:

答案 0 :(得分:59)

获取此行为的最简单方法是使用numpy.float64而不是Python默认float类型:

>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf

当然这需要NumPy。您可以使用numpy.seterr()来微调错误处理。

答案 1 :(得分:23)

方法1:

try:
    value = a/b
except ZeroDivisionError:
    value = float('Inf')

方法2:

if b != 0:
    value = a / b
else:
    value = float('Inf')

但请注意,该值也可以是-Inf,因此您应该进行更独特的测试。不过,上面的内容应该会让你了解如何做到这一点。

答案 2 :(得分:8)

您可以尝试使用'decimal'模块:

>>> 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

答案 3 :(得分:-4)

如果我理解你的问题,那么这应该是解决方案:

try:
   1.0/0.0
except:    
   return 'inf'

您可以根据各种可用的python异常处理方法对其进行修改

答案 4 :(得分:-5)

我在我的python程序中使用了一个包装器函数进行简单的划分,当我使用的传感器没有插入时,它返回ZeroDivisionError。它只返回0(零),这在实际术语中是什么我想了。然而,可能会因更多变量而变得混乱......

def calculation(a, b):
    if a == 0:
        return 0
    elif b == 0:
        return 0
    else:
        return a/b