01 / 07
思いこみは、書かないと消える
コードを書いているとき、あなたの頭の中にはいつも「ここではこうなっているはず」という思いこみがある。
「ねだんがマイナスになることはない」「リストは空ではない」。でもその思いこみは、コードのどこにも書かれていない。だから外れたときに誰も気づけないんだ。
それを書き残しておく道具が assert(アサート)。英語で「言いきる」という意味だよ。
まちがいと向き合う
INPUT · スライド
01 / 07
コードを書いているとき、あなたの頭の中にはいつも「ここではこうなっているはず」という思いこみがある。
「ねだんがマイナスになることはない」「リストは空ではない」。でもその思いこみは、コードのどこにも書かれていない。だから外れたときに誰も気づけないんだ。
それを書き残しておく道具が assert(アサート)。英語で「言いきる」という意味だよ。
02 / 07
assert のうしろに、成り立っていてほしい条件を書く。それだけだよ。
条件が成り立っていれば、その行は何も起こさずに素通りする。表示も出ない。静かなのが正常なんだ。
nedan = 300assert nedan > 0print("だいじょうぶ")実行結果
だいじょうぶ
03 / 07
条件が成り立たないと、Python は AssertionError を出してそこで止まる。あとに書いた行はもう動かないよ。
止まってくれるのがありがたいところ。おかしな値のまま先へ進ませないのが assert の役目だからね。
nedan = -100print("かくにんちゅう")assert nedan > 0print("ここまで来ない")実行結果
かくにんちゅう AssertionError
04 / 07
条件のうしろにカンマを書くと、メッセージを足せる。外れたときにそれが一緒に出るよ。
書くのは「何が、どうなっているはずだったか」。あとで読む自分のために、ひとこと残しておこう。
nedan = -100assert nedan > 0, "ねだんは正の数のはず"実行結果
AssertionError: ねだんは正の数のはず
05 / 07
同じ判定は if でも書ける。でもねらいがまったくちがうんだ。
if … 起こりうることを扱う。在庫が0、名前が空。そのときどうするかを書くassert … 起こらないはずのことを書く。起きたらそれはプログラムのまちがいassert に書くのは「ここまで来た時点で、これは絶対に成り立っている」という確信だよ。
kosuu = 2assert kosuu >= 1, "こすうは1いじょうのはず"print(kosuu * 150)実行結果
300
06 / 07
よくある失敗がこれ。assert (nedan > 0, "ねだんは正の数のはず") と、条件とメッセージをまとめてカッコでくくってしまう書きかただよ。
こう書くと Python は中身をひとかたまりの値として受け取ってしまい、どんなときでも成り立つことになる。つまり何も確かめていないのに、確かめたつもりになってしまうんだ。
条件とメッセージは、カッコで囲まずにカンマで並べる。これだけ覚えておこう。
07 / 07
assert は自分の思いこみをコードに書き残す道具だった。
AssertionError でその場で止まるただし assert にできるのは「止まる」ことだけ。止まらずに別の道へ逃がしたいこともあるよね。次はその書きかたを覚えよう。