けったいなBugとの闘い
今日私が前に作った機能をさくっとテストしてみたら、どうも動きがおかしい。あれ?と思って調べていくと、あるオプションがFalseにもかかわらず、なぜか実行されている。
ソースをみるとこんな感じ(python)
if test_flag:
print 'OK!'
else:
print 'NG!'
<注:pythonがわかる読者の方へ(そんなひといるのか?): pythonはインデント(字下げ)が大事なんですが、アメブロで書いたらさくっとスペース消されちゃったのであきらめました。ま、雰囲気で読んでください。>
デフォルトの値はtest_flagはFalseにしてるはずなのに、実行すると 'OK!' と表示されてしまう。
ちゃんと初期化されてないのかなあ?とおもって、ソースを以下のように変更して実行。
print test_flag
if test_flag:
print 'OK!'
else:
print 'NG!'
結果:
False
OK!
うげー、なんでだー。
さらに変更
print test_flag
if test_flag:
print test_flag
print 'OK!'
else:
print 'NG!'
False
False
OK!
うぎゃー。パニック。
オプションを明示的に与えてみたところ、
# python program1 --no_test_flag
False
NG!
うわー。同じFalseなのにこっちはFalseだー。でも、なんかここに鍵があるのは間違いない。
~~~~~赤いきつねを食べながら1時間経過~~~~
ふと、なにかのきっかけで FalseがほんとにFalseか?幻じゃないか?と思い立ち、
print type(test_flag)
if test_flag:
print 'OK!'
else:
print 'NG!'
としたら、
<type 'str'> (文字列)とのこと。どひゃーー。
ソースをたどっていくと、設定ファイルからパラメータを読み込む際、Falseというのを文字列でもってきたままBoolean(真偽値)に変更していなかったら起きたBugでした。
よくみると昔のパラメータはちゃんとBooleanに変換してる。私が書いた時に参考にしたウッチーのソースがBugの始まりでした。やっぱ、ウッチーは。。って、人のせいにしてちゃだめで、ちゃんと理解せずに真似して書いた私が悪い。。
とにかく頭がぱにくった数時間でした。
初めてほんとにプログラミングブログっぽいことを書いたなー。内容は低レベルだけど。。
ソースをみるとこんな感じ(python)
if test_flag:
print 'OK!'
else:
print 'NG!'
<注:pythonがわかる読者の方へ(そんなひといるのか?): pythonはインデント(字下げ)が大事なんですが、アメブロで書いたらさくっとスペース消されちゃったのであきらめました。ま、雰囲気で読んでください。>
デフォルトの値はtest_flagはFalseにしてるはずなのに、実行すると 'OK!' と表示されてしまう。
ちゃんと初期化されてないのかなあ?とおもって、ソースを以下のように変更して実行。
print test_flag
if test_flag:
print 'OK!'
else:
print 'NG!'
結果:
False
OK!
うげー、なんでだー。
さらに変更
print test_flag
if test_flag:
print test_flag
print 'OK!'
else:
print 'NG!'
False
False
OK!
うぎゃー。パニック。
オプションを明示的に与えてみたところ、
# python program1 --no_test_flag
False
NG!
うわー。同じFalseなのにこっちはFalseだー。でも、なんかここに鍵があるのは間違いない。
~~~~~赤いきつねを食べながら1時間経過~~~~
ふと、なにかのきっかけで FalseがほんとにFalseか?幻じゃないか?と思い立ち、
print type(test_flag)
if test_flag:
print 'OK!'
else:
print 'NG!'
としたら、
<type 'str'> (文字列)とのこと。どひゃーー。
ソースをたどっていくと、設定ファイルからパラメータを読み込む際、Falseというのを文字列でもってきたままBoolean(真偽値)に変更していなかったら起きたBugでした。
よくみると昔のパラメータはちゃんとBooleanに変換してる。私が書いた時に参考にしたウッチーのソースがBugの始まりでした。やっぱ、ウッチーは。。って、人のせいにしてちゃだめで、ちゃんと理解せずに真似して書いた私が悪い。。
とにかく頭がぱにくった数時間でした。
初めてほんとにプログラミングブログっぽいことを書いたなー。内容は低レベルだけど。。