過去の日記

2012-12-10 [長年日記]

括弧を忘れてmethodが返ってくる罠 [Python]

やってることは嘘だけど、ざっと省略してこんなソースを書いてた。

n1=foo() #datetime型
n2=bar #datetime型
td=n1-n2 #timedelta型

if td.total_seconds>0:
    print "n1が%s秒早いです"% td.total_seconds()
else:
    print "n2が%s秒早いです"% -td.total_seconds()

これ、elseが実行されなかった。
n2のほうが小さい状況はまずありえないけど「一応書いておいた」ケース。
なのでそこを通すテストをわざわざやってみるまで間違いに気づかなかった。

if の部分、td.total_secondsの括弧を忘れていて、method型が返ってきてた。(Python2系では)0と比較することが許されて、(多分)必ず真。
テストして気がついてよかった。