Pythonのエラーと例外とは?初心者がよく出会うエラーとその対処法
生徒
「Pythonってどんなときにエラーが出るんですか?」
先生
「エラーは、プログラムの書き方が間違っていたり、実行中に問題が起きたときに出ますよ。」
生徒
「エラーって怖い感じがして苦手なんですけど、大丈夫ですか?」
先生
「大丈夫。どんなエラーがあるのかを知っておけば、落ち着いて対処できます。一緒に学んでいきましょう!」
1. エラーと例外の違いとは?
Pythonでは「エラー」と呼ばれるものに大きく分けて2種類あります。ひとつは文法エラー(構文エラー)、もうひとつは例外(実行時エラー)です。
文法エラーは、Pythonのルールに従っていないコードを書いたときに発生します。例えば、if文の後にコロン(:)を忘れたり、インデントを正しく揃えていなかったりすると出ます。プログラムは文法エラーがあると実行されません。
例外は、プログラムの実行中に思わぬ問題が起きたときに発生します。たとえば、0で割ろうとしたり、存在しないファイルを開こうとしたりするとエラーが出ます。例外は、コードの書き方自体は正しい場合でも、実行時の状況によって発生するので、予期しない動作を防ぐために知っておくことが重要です。
簡単な例を挙げると、次のコードは文法エラーになります。
if True
print("こんにちは")
コロンが抜けているため、Pythonはここで止まってしまいます。一方、次のコードは例外の例です。
print(10 / 0)
この場合、文法は正しいですが、0で割っているため実行時にエラー(ZeroDivisionError)が発生します。初心者はまず、文法エラーと例外の違いを理解して、どちらのケースでも冷静に対処できるように意識することが大切です。
2. よくある文法エラーの例
文法エラーは、Pythonがコードを読んで「これでは実行できないよ」と止まってしまう状態です。初心者の方がよく遭遇するエラーの一つで、ちょっとした書き間違いでもプログラムは動きません。たとえば次のようなコードです。
if True
print("こんにちは")
このコードでは、if文のあとにコロン(:)がないため、PythonはSyntaxErrorを返します。コロンを忘れるだけで処理が止まるので、初心者は特に注意が必要です。また、インデント(字下げ)が正しくない場合も文法エラーになります。
正しく書くと次のようになります。こうした小さなミスを理解して修正することが、Pythonをスムーズに学ぶ第一歩です。
if True:
print("こんにちは")
3. よくある例外(実行時エラー)の例
例外とは、プログラムの実行中に予期しない問題が発生したときに起こるエラーのことです。初めてプログラミングを学ぶ方でも理解しやすいように、よく見かける例を具体的なサンプル付きで紹介します。これを知っておくと、エラーが出たときに原因を素早く見つけやすくなります。
ZeroDivisionError(ゼロ除算エラー)
0で割り算をしようとしたときに発生するエラーです。数学でも0で割ることはできないので、Pythonでも同じようにエラーになります。
print(10 / 0)
例えば上記のコードを実行すると「ZeroDivisionError: division by zero」というエラーが出ます。これは「0で割ろうとした」という意味です。
NameError(名前エラー)
まだ定義していない変数や関数を使おうとしたときに出るエラーです。プログラムがどの変数のことか分からないために発生します。
print(apple)
この場合、「apple」という変数を事前に作っていないのでエラーになります。変数名のスペルミスでも同じエラーが出ます。
TypeError(型エラー)
異なる種類のデータを不適切に組み合わせようとしたときに起こるエラーです。例えば文字列と数字をそのまま足そうとするとエラーになります。
print("年齢は" + 20)
上記のコードでは文字列と整数を足しているため「TypeError」が発生します。解決するには、整数を文字列に変換するなど、型を揃える必要があります。型の違いに注意することで、プログラムの動作を正しく制御できます。
4. エラーの内容をよく読もう
Pythonでは、プログラムを実行するときにエラーが発生すると、その原因を詳しく示すメッセージが表示されます。初心者でもこのメッセージを理解することで、どこで何が問題になっているのかを把握でき、効率よく修正できます。
たとえば、次のようなエラーメッセージが出ることがあります。
Traceback (most recent call last):
File "main.py", line 1, in <module>
print(10 / 0)
ZeroDivisionError: division by zero
この場合、「1行目で 0 で割ろうとしたためエラーが起きた」という意味です。Pythonではエラーの種類や発生場所が明確に表示されるので、まずは焦らずメッセージをよく読み、どの変数や処理で問題が起きているかを確認しましょう。
例えば別の簡単な例として、文字列を数値に変換する処理でもエラーが起きることがあります。
num = int("abc")
print(num)
この場合は「ValueError: invalid literal for int()」というエラーが表示され、「文字列 'abc' は整数に変換できない」という意味です。エラーメッセージを読むことで、どの値が問題か、どの処理が原因かをすぐに特定できるので、初心者でもトラブルシューティングが格段にしやすくなります。
5. エラーを見つけたらどうすればいい?
プログラムでエラーが出たときは、まず慌てずに落ち着きましょう。エラーメッセージを丁寧に読み、どの種類のエラーかを特定することが解決の第一歩です。初心者でも確認できるポイントを押さえて、効率的に修正しましょう。
- SyntaxError → コロンやカッコ、インデントなど文法の間違いを見直す。例えば下記のPythonコードではコロンが抜けています:
→ コロンを追加すると正しく動きます。if old < 20 print("20歳未満の方はご利用できません。") - NameError → 変数名のスペルや定義漏れを確認する。例えば以下のように変数が定義されていない場合に発生します:
→ 事前にprint(age)age = 25のように定義しておきます。 - TypeError → 型の違いによるエラーです。数値と文字列を足そうとすると起きます:
→ この場合はage = 20 print("年齢は" + age)str(age)を使って文字列に変換します。 - ZeroDivisionError → 0で割る操作はできません。例えば:
→ 割る値が0でないか確認する必要があります。result = 10 / 0
もしエラーの原因がすぐにわからなくても、表示されるエラーメッセージをコピーしてGoogle検索すると、多くの解決例や参考記事が見つかります。特にエラーの種類や行番号を含めて検索すると、初心者でもスムーズに解決策にたどり着けます。
6. はじめのうちはエラーは出て当然!
初心者のうちは、エラーが出るのはごく自然なことです。むしろ、エラーが出るたびに「ここで何を学べるか」と考えることが、成長への近道になります。
たとえばPythonで簡単な計算をするとき、タイプミスをするとすぐにエラーが出ます。
print(10 / 0) # 0で割るとエラーになります
この場合、Pythonは「ZeroDivisionError」というメッセージを出します。初心者は驚くかもしれませんが、こうしたエラーを読み解き、原因を探して修正する経験こそが、プログラミングスキルを伸ばす最も大事なステップです。
エンジニアでも毎日エラーと向き合っています。重要なのは、「なぜこのエラーが起きたのか」を考え、少しずつ解決する力をつけることです。最初はうまくいかなくても、挑戦を続けることで、必ず理解が深まります。
7. エラーを自分で試してみよう
最後に、自分でいろんなエラーをわざと出してみて、どんな表示になるのかを確認してみましょう。エラーの種類とメッセージを見て慣れていくと、少しずつ怖くなくなりますよ。
そして、エラーの英語メッセージも「なにが起こったか」を説明しているので、辞書などで少しずつ意味を知っていくと役立ちます。