プログラミングのエラーとは?Python初心者向けに種類・原因・解決方法を解説

プログラミング

はじめに

プログラミングを勉強していると、必ずといってよいほど遭遇するのが「エラー」です。

「プログラムを書いたのに動かない」「英語のエラーメッセージが表示された」「どこを修正すればよいのか分からない」と困った経験はありませんか?

エラーとは、プログラムの文法に問題があったり、実行中に処理できない状況が発生したりすることです。また、エラーが表示されず、間違った計算結果になる場合もあります。

この記事では、高校の情報Ⅰを学んでいる人やPython初心者に向けて、プログラミングのエラーの種類、よくある原因、エラーメッセージの読み方、解決方法をサンプルコード付きで解説します。

1. プログラミングのエラーとは?

プログラミングのエラーとは、プログラムの記述や実行に問題があり、正常に処理できない状態のことです。

例えば、次のPythonプログラムを見てみましょう。

print("こんにちは"

このプログラムでは、最後の閉じかっこ ) が抜けています。

そのため、実行すると次のようなエラーが発生します。

SyntaxError: '(' was never closed

これは、Pythonの文法が正しくないために発生するエラーです。

一方、次のプログラムはどうでしょうか。

price = 100quantity = 3total = price + quantityprint(total)

実行結果:

103

プログラムは正常に実行できますが、商品の合計金額を求めたいのであれば、正しい結果は300です。

このように、エラーメッセージが表示されなくても、プログラムが意図した結果にならない場合があります。

2. プログラミングのエラーは大きく3種類

初心者向けには、プログラミングの問題を大きく3種類に分けると理解しやすくなります。

プログラムで発生する3種類の問題

文法エラー

プログラムの書き方が間違っている

例:かっこの閉じ忘れ、コロンの付け忘れ

実行時エラー

プログラムの実行中に問題が発生する

例:0で割る、存在しない変数を参照する

論理エラー

動作はするが、計算結果や処理内容が間違っている

例:掛け算すべきところを足し算している

厳密には、論理エラーはPythonが検出して例外を出すものではありません。しかし、プログラミングを学習するうえでは、実行結果が正しいかどうかを確認することも重要です。

3. SyntaxErrorとは?文法エラー

SyntaxError は、Pythonの文法に問題がある場合に発生するエラーです。

例えば、条件分岐のif文では、条件の最後にコロン : が必要です。

score = 80if score >= 60    print("合格")

このプログラムでは、コロンが抜けているため、SyntaxError が発生します。

正しくは次のように記述します。

score = 80if score >= 60:    print("合格")

文法エラーが発生した場合は、かっこ、引用符、コロンなどの記号が正しく記述されているかを確認しましょう。

4. IndentationErrorとは?インデントのエラー

Pythonでは、処理のまとまりを表すためにインデント(字下げ)を使用します。

例えば、次のコードには問題があります。

score = 80if score >= 60:print("合格")

if文の中で実行する print() が字下げされていないため、IndentationError が発生します。

正しくは次のように書きます。

score = 80if score >= 60:    print("合格")

Pythonでは通常、半角スペース4つを使ってインデントします。

スペースとタブを混在させるとエラーの原因になる場合もあるため、書き方を統一しましょう。

5. NameErrorとは?変数名の間違い

NameError は、定義されていない変数名などを使用したときに発生するエラーです。

例えば、次のプログラムを見てください。

score = 80print(socre)

変数を定義するときは score と書いているのに、表示するときは socre と書いています。

この場合、次のようなエラーが発生します。

NameError: name 'socre' is not defined

正しくは次のように記述します。

score = 80print(score)

変数名や関数名のスペルミスは、初心者が遭遇しやすいエラーの一つです。

また、Pythonでは大文字と小文字も区別されます。score と Score は別の名前として扱われるので注意しましょう。

6. TypeErrorとは?データ型のエラー

TypeError は、対応していないデータ型同士の演算などを行った場合に発生します。

例えば、次のコードです。

age = 16print("年齢は" + age)

文字列と整数をそのまま + で結合しようとしているため、エラーになります。

この場合は、整数を文字列へ変換しましょう。

age = 16print("年齢は" + str(age))

実行結果:

年齢は16

また、f文字列を使う方法もあります。

age = 16print(f"年齢は{age}")

文字列と数値は異なるデータ型であることを理解しておくと、このようなエラーを防ぎやすくなります。

7. ValueErrorとは?値が適切でない場合のエラー

ValueError は、データ型は適切でも、その値が処理に適していない場合などに発生します。

例えば、文字列を整数へ変換するときです。

age = int("abc")

"abc" は整数として解釈できないため、次のエラーが発生します。

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

正しく数値を渡せば、正常に実行できます。

age = int("16")print(age)

実行結果:

16

ユーザーが入力した値を数値に変換するときは、数字以外の文字が含まれていないか確認することが大切です。

8. IndexErrorとは?リストの範囲外を指定したエラー

IndexError は、リストなどで存在しない位置を指定した場合に発生します。

例えば、次のリストを見てみましょう。

fruits = ["りんご", "みかん", "バナナ"]print(fruits[3])

Pythonのリストでは、インデックスは0から始まります。

リストのインデックス

インデックス 0

りんご

インデックス 1

みかん

インデックス 2

バナナ

fruits[3] は存在しないため、エラーになります。

実行すると、次のようなエラーが発生します。

IndexError: list index out of range

正しくは、0から2までのインデックスを指定します。

print(fruits[2])

実行結果:

バナナ

また、len() を使用すると、リストに何個のデータがあるかを確認できます。

9. KeyErrorとは?辞書に存在しないキーを指定したエラー

辞書で存在しないキーを指定すると、KeyError が発生します。

student = {    "name": "山田",    "age": 16}print(student["score"])

この辞書には score というキーが存在しません。

実行すると、次のようなエラーになります。

KeyError: 'score'

キーが存在するか分からない場合は、get() を使用すると便利です。

print(student.get("score", 0))

実行結果:

0

get() の2番目の引数には、キーが存在しなかった場合の初期値を指定できます。

10. ZeroDivisionErrorとは?0で割ったときのエラー

ZeroDivisionError は、数値を0で割ろうとした場合に発生します。

number = 100result = number / 0print(result)

実行すると、次のエラーになります。

ZeroDivisionError: division by zero

変数を使って割り算をする場合も、割る数が0ではないか確認する必要があります。

number = 100divisor = 0if divisor != 0:    print(number / divisor)else:    print("0では割れません")

実行結果:

0では割れません

このように、条件分岐を使うことで、エラーが発生する状況を事前に確認できます。

11. Pythonのエラーメッセージの読み方

Pythonでは、エラーが発生すると Traceback と呼ばれる情報が表示されます。

例えば、次のプログラムです。

numbers = [10, 20, 30]print(numbers[5])

実行すると、次のようなエラーが表示されます。

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    print(numbers[5])
          ~~~~~~~^^^
IndexError: list index out of range

エラーメッセージには、原因を調べるための重要な情報が含まれています。

エラーメッセージの確認ポイント

① ファイル名

File "main.py"

どのファイルで問題が発生したかを示します。

② 行番号

line 3

エラーが発生した行の番号です。

③ エラーの種類と内容

IndexError: list index out of range

エラーの名前と、何が問題なのかを説明しています。

エラーが発生したら、まずエラーメッセージの最後に表示されるエラー名と説明を確認しましょう。

なお、Pythonのバージョンや実行環境によって、メッセージの詳細や表示形式が異なる場合があります。

12. Pythonでよくあるエラー一覧

ここまで紹介したエラーを整理しましょう。

エラー名主な原因
SyntaxErrorプログラムの文法が間違っている
IndentationErrorインデントが正しくない
NameError定義されていない名前を使用した
TypeError対応していないデータ型の演算など
ValueError処理に適していない値を渡した
IndexErrorリストなどの範囲外を指定した
KeyError辞書に存在しないキーを指定した
ZeroDivisionError0で割ろうとした

最初からすべてのエラー名を暗記する必要はありません。実際に遭遇したときに、原因と解決方法を一つずつ覚えていきましょう。

13. エラーが発生したときの解決方法

エラーが発生したときは、次の順番で確認すると原因を見つけやすくなります。

エラー解決の5ステップ

  1. エラーメッセージを読むエラー名と説明文を確認します。英語が分からない場合は翻訳して意味を調べましょう。
  2. エラーが発生した行を確認する表示されたファイル名と行番号を確認し、該当するコードを調べます。
  3. 変数やデータの内容を確認するprint() などを使って、変数にどのような値が入っているか確認します。
  4. 原因と思われる部分を修正する一度に多くの場所を変更せず、原因を切り分けながら修正します。
  5. もう一度実行して結果を確認するエラーが消えただけでなく、意図した結果になっているかも確認しましょう。

このように、プログラムの問題を調べて修正する作業を「デバッグ」といいます。

14. try・exceptでエラーに対応する

Pythonでは、実行中にエラーが発生する可能性のある処理に対して、try と except を使用できます。

例えば、ユーザーから数値を入力してもらうプログラムを考えてみましょう。

try:    age = int(input("年齢を入力してください:"))    print(f"{age}歳ですね")except ValueError:    print("数字を入力してください")

数字を入力した場合は、その年齢が表示されます。

一方、abc など、整数に変換できない文字を入力すると、次のように表示されます。

数字を入力してください

try の中で ValueError が発生した場合に、except ValueError の処理が実行されます。

ただし、すべてのエラーを無条件に無視すると、原因が分かりにくくなる場合があります。必要なエラーを適切に処理することが大切です。

15. 練習問題:エラーの原因を考えてみよう

次の3つのプログラムには、それぞれエラーがあります。どこが間違っているのか考えてから、解答を確認してみましょう。

問題1:変数名の間違い

次のプログラムで発生するエラーは何でしょうか?

name = “山田” print(neme)

解答を見る

問題2:リストの範囲外

次のプログラムで発生するエラーは何でしょうか?

numbers = [10, 20, 30] print(numbers[3])

解答を見る

問題3:文字列と数値

次のプログラムで発生するエラーは何でしょうか?

age = 16 print(“年齢:” + age)

解答を見る

16. まとめ

プログラミングのエラーには、文法エラー、実行時エラー、論理エラーなどがあります。

Pythonでは、SyntaxError、NameError、TypeError など、原因を示すエラーメッセージが表示されます。

重要なのは、エラー名をすべて暗記することではなく、エラーメッセージを読み、問題が発生した場所と原因を調べる習慣を身につけることです。

また、プログラムが正常に実行できても、計算結果や処理内容が正しいとは限りません。自分が期待した結果と実際の結果を比較することも大切です。

次は「デバッグとは?」を学び、プログラムの問題を効率的に発見・修正する方法を理解しましょう。