分当我做浮点除法在Python,如果我除以零,我得到一个异常:如何获得NaN当我由零
>>> 1.0/0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division
我真的很想得到NaN
或Inf
代替(因为NaN
或Inf
将通过我的计算其余正确地传播,而不是杀死我的程序)。
我该怎么做?
分当我做浮点除法在Python,如果我除以零,我得到一个异常:如何获得NaN当我由零
>>> 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
类型:
>>> import numpy
>>> numpy.float64(1.0)/0.0
inf
当然这需要NumPy的。您可以使用numpy.seterr()
来微调错误处理。
方法1:
try:
value = a/b
except ZeroDivisionError:
value = float('Inf')
方法2:
if b != 0:
value = a/b
else:
value = float('Inf')
但要知道,该值可能也被-Inf
,因此你应该做一个比较有特色的测试。尽管如此,上面的这个应该会让你知道如何去做。
我发现新的'math.inf'有点更好阅读。 – 2016-02-16 22:25:13
@NeilG如果有的话,当然。早在2012年它就不存在了...... – glglgl 2016-02-17 07:07:24
哦!不知何故,我认为这是一个新问题。无论如何,它的版本为3。5 – 2016-02-17 07:23:37
您可以尝试使用“十进制”模块:
>>> 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
我在我的一个蟒程序中使用的包装函数的简单除法这是返回ZeroDivisionError当传感器我使用没有插入。它只是返回0(零),这在现实世界中是我想要的。可能会有更多的变量杂乱,但是...
def calculation(a, b):
if a == 0:
return 0
elif b == 0:
return 0
else:
return a/b
对不起,我忘了修改这个问题,但你所要做的就是将零改为“NaN”我相信。 – 2015-07-15 15:17:55
这不是一个通用的解决方案。例如。我不希望a/0.0给0,我也不期望它给NaN。 – Brandin 2016-01-18 14:55:05
实际上'NaN'或'Inf'除以零? – beerbajay 2012-04-04 13:13:00
@beerbajay:'0.0/0.0' - >'nan','1.0/0.0' - >'inf','-1.0/0.0' - >'-inf'。 – 2012-04-04 13:14:09
其实非常有趣的是改变Python的行为,所以它真的适用于'1.0/0',没有明确地重新输入所有内容或放任何东西 - 除了在任何地方。 – Fenikso 2012-04-04 13:30:18