当我在 Python 中进行浮点除法时,如果我除以零,则会出现异常:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
我真的很想得到NaN
or Inf
(因为NaN
orInf
将正确地传播到我的其余计算中,而不是杀死我的程序)。
我怎样才能做到这一点?
当我在 Python 中进行浮点除法时,如果我除以零,则会出现异常:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
我真的很想得到NaN
or Inf
(因为NaN
orInf
将正确地传播到我的其余计算中,而不是杀死我的程序)。
我怎样才能做到这一点?
获得此行为的最简单方法是使用numpy.float64
而不是 Python 默认float
类型:
>>> import numpy
>>> numpy.float64(1.0) / 0.0
inf
当然,这需要 NumPy。您可以使用numpy.seterr()
来微调错误处理。
方法一:
try:
value = a/b
except ZeroDivisionError:
value = float('Inf')
方法二:
if b != 0:
value = a / b
else:
value = float('Inf')
但请注意,该值也可能是-Inf
,因此您应该进行更独特的测试。尽管如此,上面的内容应该让您知道如何去做。
您可以尝试使用“十进制”模块:
>>> 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
如果我正确理解您的问题,那么这应该是解决方案:
try:
1.0/0.0
except:
return 'inf'
您可以根据可用的各种python异常处理方法对其进行修改
我在我的一个 python 程序中使用了一个包装函数,用于一个简单的除法,当我使用的传感器没有插入时,它返回 ZeroDivisionError。它只返回 0(零),这在现实世界中是我想要的。可能会因为更多的变量而变得混乱,但是......
def calculation(a, b):
if a == 0:
return 0
elif b == 0:
return 0
else:
return a/b