CHAPTER 4 · 6 lessons · 78問
まちがいと向き合う
エラーを読み、原因を突きとめ、想定外に備える。ここを通ると、詰まっても自分で進めるようになる。
プログラミングを続けていくうえで、実力の差がいちばん出るのは「うまく書けるか」ではない。詰まったときに自分で抜け出せるかだよ。だからこの章を、クラスより前に置いている。
ここまでの章でも、エラーには何度も出会ってきたはずだ。NameError、TypeError、IndexError、KeyError。この章では、それを腰を据えて読む。エラーは Python が出すいちばん正確な報告書で、どこで何が起きたかがそこに全部書いてある。読めるようになると、詰まっている時間が劇的に短くなる。
まず エラーの種類。名前を見るだけで原因の見当がつくようになろう。NameError は知らない名前を使った、TypeError は種類の合わないものを組み合わせた、IndexError はリストの範囲外を取りに行った、KeyError は辞書に無いキーを引いた。だいたいこの4つで、初学者が出すエラーの大半は説明がつく。
次が トレースバックの読み方。エラーが出たとき、Python は「どの行で起きたか」だけでなく「そこへどうやって来たか」まで教えてくれる。関数が関数を呼んでいると長くなるけれど、読み方にはコツがあって、いちばん下から読むといい。下に本当の原因が書いてあるからだよ。
原因が分からないときの手段が print デバッグ。あやしい場所に print を置いて、そのときの変数の中身を見る。原始的に思えるかもしれないけれど、これはプロも毎日やっている。期待した値と実際の値を比べると、原因を絞る手がかりになる。処理の順番や条件もあわせて確認しよう。
章の後半は、まちがいに備える側へ回る。assert は「ここでは必ずこうなっているはず」という自分の思いこみをコードに書いておくもので、外れたらその場で止まる。try と except は「失敗するかもしれない処理」を囲んで、落ちるかわりに別の道へ逃がす仕組み。そして raise は、自分から「これはおかしい」と声を上げる書き方だよ。
ここまで来ると、エラーは「出たら終わり」のものではなくなる。設計の一部として使えるようになる。
この章のレッスン
エラーを読む