Python入門|よくあるエラーメッセージの意味と修正方法を学ぼう【レッスン2-8】

一つ前のLessonでは繰り返しの制御について学習しました。
今回はエラーメッセージについて見ていきます。
Lesson1:基礎文法編
Lesson2:制御構造編
・Lesson2-1:比較演算子と論理演算子を理解しよう
・Lesson2-2:条件分岐(if-else文)を理解しよう
・Lesson2-3:条件分岐(if-elif-else文)を理解しよう
・Lesson2-4:条件分岐(match文)を理解しよう
・Lesson2-5:繰り返し処理(for文)を理解しよう
・Lesson2-6:繰り返し処理(while文)を理解しよう
・Lesson2-7:繰り返しの制御を理解しよう
・Lesson2-8:エラーメッセージを読めるようになろう ◁今回はココ
・Lesson2-9:例外処理の基礎を理解しよう
・練習問題2-1:ハイアンドロー ゲームを作ろう
・練習問題2-2:数字当てゲームを作ろう
・練習問題2-3:簡単なじゃんけんゲームを作ろう
Lesson3:関数とスコープ編
Lesson4:データ構造編
Lesson5:オブジェクト指向編
次のステップ:Pythonを用いたアプリ開発
Pythonで表示される5つの代表的なエラーの読み解き方と解決法
この章ではPythonにおける「エラーメッセージ」の意味や読み方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。
プログラミングを始めたばかりの頃、エラーメッセージに戸惑うことが多いかもしれません。
しかしエラーメッセージはバグを修正するためのヒントを提供してくれる重要な情報です。
この記事ではPythonでよく見られるエラーメッセージをいくつか紹介し、その読み方を解説します。
SyntaxError (構文エラー)
SyntaxError はPythonの構文に誤りがある場合に発生します。例えば、下のコードを見てみましょう。
print("Hello World
上記のコードを実行すると次のエラーが出ます。
SyntaxError: EOL while scanning string literal
エラーメッセージは文字列の終わりを示す引用符 "
が閉じていないことを教えてくれています。
この場合、引用符を正しく閉じれば問題は解決します。
NameError (名前エラー)
NameError は、宣言されていない変数や関数を使おうとしたときに発生します。これは、スペルミスや変数が定義されていない場合によく起こります。
aisatsu = "hellow" print(oisatsu)
このコードは次のようなエラーを返します。
NameError: name 'oisatsu' is not defined
このメッセージは、「oisatsu」という名前の変数が定義されていないことを示しています。
変数が正しく宣言されているか、スペルミスがないか確認しましょう。
TypeError (型エラー)
TypeError は、異なる型同士を不正に操作した場合に発生します。例えば、文字列と整数を直接足そうとすると、このエラーが発生します。
age = 20 message = "I am " + age + " years old"
実行すると、次のエラーが発生します。
TypeError: can only concatenate str (not "int") to str
このエラーメッセージは文字列と整数は直接結合できないことを示しています。
このエラーを修正するには整数を文字列に変換してから結合する必要があります。
age = 20 message = "I am " + str(age) + " years old"
IndexError (インデックスエラー)
IndexError は、リストやタプルの範囲外のインデックスにアクセスしようとしたときに発生します。
my_list = [1, 2, 3] print(my_list[ 3])
実行すると、次のエラーが発生します。
IndexError: list index out of range
リストのインデックスは 0 から始まりますが、リストには3つの要素しかないため、インデックス3は範囲外です。
修正するには有効なインデックスを使用するか、リストの長さを確認しましょう。
ValueError (値エラー)
ValueError は関数や操作が正しい型であるものの、不適切な値が渡された場合に発生します。
number = int("hello")
このコードを実行すると次のエラーが出ます。
ValueError: invalid literal for int() with base 10: 'hello'
このメッセージは「hello」という文字列を整数に変換しようとしたためにエラーが発生していることを教えてくれます。
まとめ
エラーメッセージはプログラミングを進める上で非常に重要な道具です。
どのエラーメッセージもバグ修正のヒントを提供してくれるので、メッセージの内容をよく読み、少しずつ理解を深めていきましょう。
エラーを恐れる必要はありません。エラーメッセージを読めるようになることで、プログラミングのスキルも向上していくことでしょう。
練習問題:エラーメッセージを読んでエラーを修正しよう
以下のコードをコピーして実行してみましょう。
そうすると複数のエラーが発生しますので、表示されるエラーメッセージを参考にしてエラー箇所を特定し、正しいコードを書きましょう。
print("Hello World print(helloworld) age = 20 message = "I am " + age + " years old" print(message) # まだリストを勉強していない人は、以下の2行は無視してください。 my_list = [1, 2, 3] print(my_list[ 3]) number = int("hello") print(number)
問題の答え合わせと解説
この問題の一つの正解例とそのコードの解説を以下に示します。
一つの正解例
例えば以下のようなプログラムが考えられます。
- 正解コード
-
# 1. SyntaxError - クォーテーションを閉じる print("Hello World") # 2. NameError - 変数を定義 helloworld = "Hello World" print(helloworld) # 3. TypeError - 整数を文字列に変換して結合 age = 20 message = "I am " + str(age) + " years old" print(message) # 4. IndexError - 有効なインデックスを使用 my_list = [1, 2, 3] print(my_list[ 2]) # インデックスは0から始まるので、最大は2 # 5. ValueError - 整数として解釈可能な文字列を使用 number = int("10") print(number)
正解例の詳細解説
非常にシンプルなコードのため解説はありません。
難しいと感じる方は上記の用語の説明を見返してみてください。
FAQ|Pythonのエラーを理解するために
- Q1. Pythonの「SyntaxError」ってどんなときに出ますか?
-
文法ミス(カッコの閉じ忘れやコロンの付け忘れなど)のときに出るエラーです。
- Q2. 「NameError」の対処法はありますか?
-
未定義の変数を使った場合に出ます。変数名のスペルや定義の位置を確認しましょう。
- Q3. エラーが出たときに原因を調べるには?
-
トレースバック(エラーの表示メッセージ)を上から順に読み、どの行で何が原因かを確認することが重要です。
質問用コンタクトフォーム
この記事はAIを用いて書いた記事です。
人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。