当我在Python中进行浮点除法时,如果我除以零,我得到一个例外:
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
我真的希望得到NaN
或Inf
(因为NaN
或Inf
会在我的计算中正确传播并且不会杀死我的程序)。
我该怎么做?
答案 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