まちがいと向き合う

INPUT · スライド

思いこみを書き残す

01 / 07

思いこみは、書かないと消える

コードを書いているとき、あなたの頭の中にはいつも「ここではこうなっているはず」という思いこみがある。

「ねだんがマイナスになることはない」「リストは空ではない」。でもその思いこみは、コードのどこにも書かれていない。だから外れたときに誰も気づけないんだ。

それを書き残しておく道具が assert(アサート)。英語で「言いきる」という意味だよ。

02 / 07

assert の形

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 でも書ける。でもねらいがまったくちがうんだ。

  • if … 起こりうることを扱う。在庫が0、名前が空。そのときどうするかを書く
  • assert … 起こらないはずのことを書く。起きたらそれはプログラムのまちがい

assert に書くのは「ここまで来た時点で、これは絶対に成り立っている」という確信だよ。

kosuu = 2assert kosuu >= 1, "こすうは1いじょうのはず"print(kosuu * 150)

実行結果

300

06 / 07

カッコで囲まない

よくある失敗がこれ。assert (nedan > 0, "ねだんは正の数のはず") と、条件とメッセージをまとめてカッコでくくってしまう書きかただよ。

こう書くと Python は中身をひとかたまりの値として受け取ってしまい、どんなときでも成り立つことになる。つまり何も確かめていないのに、確かめたつもりになってしまうんだ。

条件とメッセージは、カッコで囲まずにカンマで並べる。これだけ覚えておこう。

07 / 07

まとめ

assert は自分の思いこみをコードに書き残す道具だった。

  • 成り立っていれば素通りする
  • 外れたら AssertionError でその場で止まる
  • カンマのうしろにメッセージを書ける

ただし assert にできるのは「止まる」ことだけ。止まらずに別の道へ逃がしたいこともあるよね。次はその書きかたを覚えよう。