当我除以零时如何得到NaN
当我在Python中进行浮点除法时,如果我除以零,我得到一个exception:
>>> 1.0/0.0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: float division
我真的很想拿NaN
或Inf
来代替(因为NaN
或Inf
会正确地传播我的其余部分,而不是杀死我的程序)。
我怎样才能做到这一点?
得到这种行为最简单的方法是使用numpy.float64
而不是Python默认的float
types:
>>> 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