エラーを読んでみる
赤い文字が出た瞬間に手が止まる
エラーは「あなたが下手だ」という宣告ではなく、Python が出してくれた どこで何が起きたかの報告書 です。ただ英語で何行も出るので、読まずに閉じてしまう人が多い。読む場所は 3 か所だけです。
- いちばん下の行の エラー名
- その右にある メッセージ
- 上のほうにある
lineに続く 行番号
上のほうの行は Python の内部の呼び出し履歴なので、原因はいちばん下に書いてあります。下から読むのが鉄則です。
NameError は名前の間違い
NameError は「その名前は知りません」という意味です。打ち間違いか、まだ用意していない名前を使ったときに出ます。
Python
Traceback (most recent call last)
File "main.py", line 2, in total_days
return start + finsh
NameError: name 'finsh' is not definedいちばん下に NameError、その右に name 'finsh' is not defined、上のほうに line 2。この 3 つで「2 行目の finsh という名前が存在しない」と読めます。あとは綴りを直すだけです。is not defined は「定義されていない」という意味で、エラーメッセージに出てくる表現はほんの数種類しかありません。
NameError は実行がその行に 届いたとき に出ます。通らない行に間違いがあると、しばらく気づけません。
SyntaxError は文法の壊れ
SyntaxError は「文として読めない」という意味で、Python は実行を始めることすらできません。閉じ忘れたクオート、閉じ忘れたかっこ、def の行末のコロン抜け、全角で入力してしまった記号。原因はだいたいこの 4 つです。
Python
print("合計"やっかいなのは、SyntaxError の行番号が 本当の原因より 1 行あと を指すことです。閉じかっこが足りないと、Python は次の行まで読んで初めておかしいと気づくためです。指摘された行で見つからなければ、必ず 1 つ上の行も見てください。
直すときは、1 回に 1 か所だけ直してもう一度実行します。あちこち同時に直すと、どの変更が効いたのか分からなくなります。
やってみよう
関数 safe_total を実装してください。引数は price1、price2、price3 の 3 つで、3 件の合計を数値で返します。
用意されている starter_code はわざと壊してあります。実行すると NameError が出るので、メッセージを読んでどの名前が間違っているかを突き止め、正しい引数名に直してください。動かない行をまるごと削ればエラーは消えますが、必要な処理まで消えます。直すのであって、消すのではありません。
safe_total(120, 80, 200) なら 400、すべて 0 なら 0 です。
要件
- 関数名は safe_total で、引数は price1・price2・price3 の3つ
- 3つの引数の合計を数値で return する
- starter_code にある間違った名前を正しい引数名に直す
- エラーが出る行を削らずに、正しく動くよう直す