こんにちは、森山です。
前回のコラムでは、よく使う処理をひとまとめにして、必要なときに呼び出せる「関数」の応用について学びました。関数を使うと、出席確認や平均点の計算などを、すっきりと書けましたね。
ところで皆さんは、自分で書いたプログラムをGoogle Colabで実行したとき、カッコが抜けていたり、インデントが間違っていたりして、動かなかったことはありませんか?
このような、Pythonの書き方のルールに関する間違いを「構文エラー」といいます。「エラー」については、今までのコラムでも何度か登場していました。
一方で、Pythonの書き方に問題がなくても、プログラムの実行中に処理を続けられなくなることがあります。このような、実行中に発生する問題を「例外」といいます。エラーはプログラムで起きる問題を広く表す言葉で、その中には構文エラーや、実行中に発生する例外などがあります。
ハイスクールPythonの「7. エラーと向き合う」でも紹介されているように、プログラミングではエラーや例外は避けられません。だからこそ、エラーメッセージを読んで原因を見つけ、適切に対応する「エラーとの付き合い方」を知ることが大切です。
今回は、よくあるエラーを例に、メッセージから問題の場所を見つけて直す方法を学びましょう。
エラーが起きるとどうなる?
例えば、点数を入力するプログラムで、数字の代わりに「欠席」と入力したらどうなるでしょうか。
Pythonでは、int()を使うと、受け取った文字を整数に変換できます。
score = int(input("点数を入力してください:"))
print(f"あなたの点数は{score}点です")
このコードをGoogle Colabで実行して、まずは数字を入力して実行してみてください。入力した点数を含む文章が表示されたでしょうか。
次に、もう一度実行して「欠席」と入力してみましょう。
「欠席」は数字ではないため、Pythonは整数に変換できません。そのため、エラーが表示されてプログラムが途中で止まります。
エラーメッセージの最後には、ValueErrorと表示されます。これは、値を正しく変換できなかったときなどに発生する例外です。
学校のテストを例に考えてみましょう。
数学のマークシートの問題で、答えの番号を塗りつぶす欄に文章を書いても、読み取り機は答えを認識できず、正しく採点できませんよね。これは、読み取り機が「答えの番号が塗りつぶされている」という形で読み取ることを前提にして待っているからです。
Pythonも同じで、数字に変換しようとしているところでは、数字として扱えるデータを受け取ることを前提にしています。そこへ文章が入ると、どう扱えばよいか分からず、例外が起きます。
エラーが起きること自体は、悪いことではありません。入力ミスや通信の不調など、プログラムの外で起きることまで、あらかじめ全て防ぐのは難しいためです。大切なのは、エラーが起きたときに、何が原因なのかを確認して対応することです。
例えば、スマホで会員登録をするとき、メールアドレスの欄に@を入れ忘れると、「メールアドレスの形式が正しくありません」と表示され、入力内容を確認するよう求められますよね。
想定していない内容を受け取ったときに、プログラムをそのまま止めるのではなく、利用者に入力方法を案内するなどの対応ができます。このように、エラーや例外が起きた場合に備えて対応を用意することをエラー処理といいます。
エラー処理を考えるためにも、まずはエラーの内容を読めるようになりましょう。
エラーメッセージから問題の場所を探そう
Google Colabでエラーが起きると、赤い文字でメッセージが表示されます。見る場所は主に3つです。
- どの行で問題が起きたか
- どのようなエラーなのか
- Pythonが何に困っているのか
例えば、次のコードを実行してみましょう。
message = "こんにちは"
print(mesage)
NameError: name 'mesage' is not definedというエラーメッセージが表示され、処理が止まったと思います。これは、messageという変数を作ったのに、print()の中ではmesageと書いているためです。messageの2つ目のsが抜けているだけですが、Pythonはmessageとmesageを全く別の変数として認識します。このように、まだ作られていない変数を使おうとすると、NameErrorが表示され、処理が中断します。
エラーメッセージの最後には、name ‘mesage’ is not definedのように、問題になった名前が表示されます。
よくあるエラーを体験してみよう
次は、条件分岐で使ったif文の例です。
score = 80
if score >= 60
print("合格です")
このコードでは、if score >= 60の行の最後に必要な:がありません。Pythonは文章の形を正しく読み取れないため、SyntaxErrorというエラーを表示します。
行の最後に:を追加すると、正しく実行できます。
score = 80
if score >= 60:
print("合格です")
修正したコードをGoogle Colabで実行してみてください。「合格です」と表示されたでしょうか?
Syntaxは「文法」という意味です。英語の文章で主語や動詞の並び方にルールがあるように、Pythonにもコードを書くためのルールがあります。カッコや引用符の閉じ忘れ、:の書き忘れなどがあると、SyntaxErrorが表示されます。また、インデントに問題がある場合は、IndentationErrorが表示されることもあります。
このエラーも以前のコラムで登場したことがありましたね。
もう1つ、リスト型でよく起きるエラーも見てみましょう。
members = ["石川", "山口", "内田"]
print(members[3])
リストの番号は0から始まるため、このリストで取り出せる番号は0、1、2です。存在しない番号の3、つまり4番目のデータを取り出そうとすると、IndexErrorが表示されます。
名簿に3人しかいないのに「4人目を呼んで」と言われても、先生は呼べませんよね。リストでも同じように、入っていない場所のデータは取り出せません。
3番目に入っている「内田」を取り出したい場合は、リストの番号を2に修正します。
members = ["石川", "山口", "内田"]
print(members[2])
修正したコードをGoogle Colabで実行して、「内田」と表示されるかぜひ確認してみてください。
ここがポイント!
プログラムを実行したときにエラーが表示されたら、次の順番で確認してみましょう。
- エラーメッセージに示された行と、その直前の行を確認する
- メッセージの最後に書かれたエラー名を見る
- 変数名、カッコ、
:、インデント、リストの番号を見直す - 直したら、もう一度Google Colabで実行する
エラーはPythonからのヒントです
エラーが表示されると、「失敗した」と感じるかもしれません。しかし、エラーはプログラムをよりよくするためのヒントです。少しずつメッセージを読めるようになると、自分で原因を見つけて直せる場面が増えていきます。
今回紹介したもの以外にも、Pythonには多くの種類のエラーと例外があります。ハイスクールPythonの「7.1 エラーと例外:よくあるミスとその原因」では、よくあるエラーと例外の予防チェックポイントも紹介されています。そちらもぜひ確認してみてください。
最後までお読みいただき、ありがとうございました。
それではまた次回お会いしましょう!

