math.isnan()について
Python2.6以降にはmathモジュールにisnan()という関数が用意されているのですがこれはJavascriptのisNaNとはことなる働きをするものなのでちょっと嵌ってしまいました。
JavascriptのisNaN()関数は何でも評価することができtrueかfalseが返されます
window.alert(isNaN("abc")); //true window.alert(isNaN("5")); //false window.alert(isNaN(0)); //false window.alert(isNaN("3.2")); //false window.alert(isNaN([])); //false window.alert(isNaN([3,4])); //true window.alert(isNaN(["abc","def"])); //true window.alert(isNaN(null)); //false
[]やnullがfalseを返すのは注意ですが、何でも評価できるという特徴を使って文字列と数字が混在する配列に適用して文字列と数字をわけると言った使い方ができます。
これに対してpythonのmath.isnan()は文字列を評価することができません。
import math print math.isnan("abc") #TypeError
文字列を評価しようとするとTypeErrorになります。
math.isnan()を使ってTrue,Falseで文字列と数字をわけることはできないということですね。(例外を扱うことでわけることはできるかもしれませんが・・)
import math print math.isnan(5) #False print math.isnan(3.14) #False print math.isnan("8") #TypeError
ではmath.isnan()は何を評価した場合にTrueを返すのかですが、
import math print math.isnan(float("nan")) #True
これはTrueが返ります。つまりmath.isnan()は文字通り(?)float型の"nan"という値のみをTrueと評価するようです。