まちがいと向き合う

INPUT · スライド

エラーの名前を見分ける

01 / 07

エラーは報告書

コードを動かして知らない文字がどっと出ると、こわく感じるかもしれない。でもあれは怒られているのではなくて、Pythonからの報告書だよ。

報告書のいちばん大事なところは最後の1行。NameError: name 'namae' is not defined のように、「種類: 本文」という形で書かれている。

このレッスンでは、まず種類の名前だけを覚えよう。名前を見ただけで「ああ、あれか」と見当がつくようになると、詰まっている時間がぐっと短くなるよ。

02 / 07

NameError は知らない名前

知らない名前を使ったときに出るエラーだよ。だいたいは打ちまちがいか、変数を作る前に使ってしまったときだね。

下の例では namae という名前で作ったのに、namea と呼んでいる。Pythonは正直なので「namea なんて名前は聞いていない」と言うんだ。

is not defined は「定義されていない」という意味。つづりと、作った順番を疑おう。

namae = "あおい"print(namea)

実行結果

NameError: name 'namea' is not defined. Did you mean: 'namae'?

03 / 07

TypeError は種類ちがい

種類(型)の合わないものを組み合わせたときに出るよ。文字と数を + でつなごうとするのが代表例だね。

Pythonは「文字に足せるのは文字だけ」と考えるので、300 をそのままつなげない。str(300) で文字に変えるか、f文字列を使えば直るよ。

print("ねだん: " + 300)

実行結果

TypeError: can only concatenate str (not "int") to str

04 / 07

IndexError は範囲の外

リストの無い番号を取りに行くと出る。要素が3つなら使える番号は 0 1 2 まで。3 はもう無いよ。

list index out of range は「番号が範囲の外」という意味。len() より1つ小さいところまで、と覚えておこう。

kudamonos = ["りんご", "みかん", "ぶどう"]print(kudamonos[3])

実行結果

IndexError: list index out of range

05 / 07

KeyError は辞書に無いキー

辞書に入っていないキーを引くと出るよ。本文には引こうとしたキーがそのまま出てくるので、どれをまちがえたのかすぐ分かる。

リストなら IndexError、辞書なら KeyError。入れものの種類でエラーの名前が変わるところが面白いね。

nedans = {"りんご": 120, "みかん": 80}print(nedans["ぶどう"])

実行結果

KeyError: 'ぶどう'

06 / 07

ValueError は中身の形がだめ

種類は合っているのに、中身の形が合わないときに出る。int("abc") がその代表だよ。

int() は文字を数に変える道具。文字を渡すところまでは正しいけれど、"abc" は数の形をしていない。だから「その値ではむり」と言われるんだ。

TypeError は種類がちがう、ValueError は種類は合っているが中身がだめ。ここが見分けどころだよ。

print(int("abc"))

実行結果

ValueError: invalid literal for int() with base 10: 'abc'

07 / 07

6つ覚えれば当面足りる

もう1つ、ZeroDivisionError も見ておこう。0で割ったときに出る。人数が0人のときに割り勘を計算してしまう、というのがありがちな形だね。

名前と原因を並べておくよ。

名前何が起きたか
NameError知らない名前を使った
TypeError種類の合わないものを組み合わせた
IndexErrorリストの範囲外の番号を取りに行った
KeyError辞書に無いキーを引いた
ValueError種類は合うが中身の形がだめ
ZeroDivisionError0で割った

この6つで、初学者が出すエラーの大半は説明がつく。次は、この1行と一緒に出てくる長い文字の読み方だよ。

print(10 / 0)

実行結果

ZeroDivisionError: division by zero