1. 程式人生 > >[python] nan型別

[python] nan型別

  今天在用寫一段求和的程式碼時候,發現最後返回的是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 1in <module> NameError: name 'isNaN' is not defined

 天哪!這個nan到底是什麼型別!

最後突然想到了py自帶的math庫下面好像有一個判斷nan的函式——isnan,抱著必死的心態,試了試:

>>from math import isnan

>>isnan(res)
True

Wooooooo!True! 終於找到辦法了!天哪!終於解決了,這一個小問題糾結了我一中午。。。