分當我做浮點除法在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