CHAPTER 4 · 6 lessons · 78問

まちがいと向き合う

エラーを読み、原因を突きとめ、想定外に備える。ここを通ると、詰まっても自分で進めるようになる。

0 / 78 問クリア

プログラミングを続けていくうえで、実力の差がいちばん出るのは「うまく書けるか」ではない。詰まったときに自分で抜け出せるかだよ。だからこの章を、クラスより前に置いている。

ここまでの章でも、エラーには何度も出会ってきたはずだ。NameError、TypeError、IndexError、KeyError。この章では、それを腰を据えて読む。エラーは Python が出すいちばん正確な報告書で、どこで何が起きたかがそこに全部書いてある。読めるようになると、詰まっている時間が劇的に短くなる。

まず エラーの種類。名前を見るだけで原因の見当がつくようになろう。NameError は知らない名前を使った、TypeError は種類の合わないものを組み合わせた、IndexError はリストの範囲外を取りに行った、KeyError は辞書に無いキーを引いた。だいたいこの4つで、初学者が出すエラーの大半は説明がつく。

次が トレースバックの読み方。エラーが出たとき、Python は「どの行で起きたか」だけでなく「そこへどうやって来たか」まで教えてくれる。関数が関数を呼んでいると長くなるけれど、読み方にはコツがあって、いちばん下から読むといい。下に本当の原因が書いてあるからだよ。

原因が分からないときの手段が print デバッグ。あやしい場所に print を置いて、そのときの変数の中身を見る。原始的に思えるかもしれないけれど、これはプロも毎日やっている。期待した値と実際の値を比べると、原因を絞る手がかりになる。処理の順番や条件もあわせて確認しよう。

章の後半は、まちがいに備える側へ回る。assert は「ここでは必ずこうなっているはず」という自分の思いこみをコードに書いておくもので、外れたらその場で止まる。try と except は「失敗するかもしれない処理」を囲んで、落ちるかわりに別の道へ逃がす仕組み。そして raise は、自分から「これはおかしい」と声を上げる書き方だよ。

ここまで来ると、エラーは「出たら終わり」のものではなくなる。設計の一部として使えるようになる。

この章のレッスン

エラーを読む

  1. 54エラーの名前を見分けるエラーは怒られているのではなく、Pythonからの報告書。名前を見れば原因の見当がつくよ。問題へ
  2. 55トレースバックを読む長い報告書は全部読まなくていい。<exec> から下と、いちばん下の1行だけ見よう。問題へ
  3. 56print で中身をのぞくエラーが出ないまちがいの探しかた。原始的に見えて、プロも毎日やっている手だよ。問題へ

エラーに備える

  1. 57思いこみを書き残すassert は「ここでは必ずこうなっているはず」を書いておく道具。外れたらその場で止まるよ。問題へ
  2. 58エラーで止めないtry に失敗するかもしれない処理、except に失敗したときの処理。落ちずに続けられるようになるよ。問題へ
  3. 59自分からエラーを出すraise でおかしな値をその場ではじこう。エラーは「起きるもの」から「使うもの」になるよ。問題へ

つぎは「クラス」。データとふるまいをひとまとめにして、自分だけの「種類」を作る。設計の考え方が変わる章。