当我除以零时如何得到NaN

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

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

我真的很想拿NaNInf来代替(因为NaNInf会正确地传播我的其余部分,而不是杀死我的程序)。

我怎样才能做到这一点?

得到这种行为最简单的方法是使用numpy.float64而不是Python默认的floattypes:

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

当然这需要NumPy。 您可以使用numpy.seterr()来微调error handling。

方法1:

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

方法2:

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

但是请注意,这个价值也可能是-Inf因此,你应该做一个更有特色的testing。 尽pipe如此,上面这个应该给你一个想法。

你可以尝试使用'十进制'模块:

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

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

 try: 1.0/0.0 except: return 'inf' 

你可以根据各种可用的pythonexception处理方法进行修改

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

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