74

当我在 Python 中进行浮点除法时,如果我除以零,则会出现异常:

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

我真的很想得到NaNor Inf(因为NaNorInf将正确地传播到我的其余计算中,而不是杀死我的程序)。

我怎样才能做到这一点?

4

5 回答 5

79

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

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

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

于 2012-04-04T13:09:33.327 回答
26

方法一:

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

方法二:

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

但请注意,该值也可能是-Inf,因此您应该进行更独特的测试。尽管如此,上面的内容应该让您知道如何去做。

于 2012-04-04T13:12:21.637 回答
9

您可以尝试使用“十进制”模块:

>>> 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
于 2012-04-04T13:13:27.347 回答
-5

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

try:
   1.0/0.0
except:    
   return 'inf'

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

于 2012-04-04T13:19:49.210 回答
-5

我在我的一个 python 程序中使用了一个包装函数,用于一个简单的除法,当我使用的传感器没有插入时,它返回 ZeroDivisionError。它只返回 0(零),这在现实世界中是我想要的。可能会因为更多的变量而变得混乱,但是......

def calculation(a, b):
    if a == 0:
        return 0
    elif b == 0:
        return 0
    else:
        return a/b
于 2015-07-15T12:03:24.883 回答