[python] nan型別
阿新 • • 發佈:2019-02-12
今天在用寫一段求和的程式碼時候,發現最後返回的是nan的結果,這段迴圈求和程式碼依次呼叫了三個函式,於是依次列印這三個函式的返回值,發現其中一個函式的返回值為nan,原來是因為這段函式裡面沒有相似的使用者,所有返回結果為nan,於是我就想加一個判斷條件,當結果為空時,跳過本次迴圈:
if res==nan: continue
本以為加上這一句話就可以了,於是重新運行了一下,oh,shit!!!!結果沒有任何變化,以前是nan的還是一樣沒有跳過。於是我想到了我用到了Python的numpy庫,會不會是numpy下的nan型別呢,於是修改一下判斷條件:
if res==np.nan:continue
重新執行!還是不對。
找到原函式的位置,列印一下產生nan型別:
>>print(type(res)) <class 'numpy.float64'>
發現屬於numpy.float64型別,沒辦法,我想要不把原來函式的返回值改為float型吧,於是找到原函式,修改:
return float(res)
然後在迴圈求和的程式碼段中加上:
if res==nan: continue
執行!gg 還是不行!
沒辦法。為了找到真凶,我只能拿出res挨著測試:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>>res = np.nan
False
>>res = nan
False
>>res = 'NaN'
False
>>res = float ( 'NaN' )
False
>>>
isNaN(res)
Traceback
(most recent call last):
File "<stdin>" ,
line 1 , in <module>
NameError:
name 'isNaN' is not defined
|
天哪!這個nan到底是什麼型別!
最後突然想到了py自帶的math庫下面好像有一個判斷nan的函式——isnan,抱著必死的心態,試了試:
>>from math import isnan >>isnan(res) True
Wooooooo!True! 終於找到辦法了!天哪!終於解決了,這一個小問題糾結了我一中午。。。