【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基礎習得者にお勧めの道5選(実務or副業)
5つの代表的なエラーの読み解き方と解決法
エラーメッセージは、プログラムがうまく動かなかった理由を教えてくれる“道しるべ”です。
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」という文字列を整数に変換しようとしたためにエラーが発生していることを教えてくれます。
まとめ
ここまで、代表的な5つのエラーの意味とエラーメッセージ(traceback)の読み方、基本的な原因の切り分け方と対処の型を確認しました。
エラーは失敗ではなく、改善ポイントを教えてくれるガイドです。
今日学んだ読み方と直し方を、小さなスクリプトでも構いませんので実際に試し、手順を体に覚えさせていきましょう。
積み重ねるほど、デバッグは短く、コードは堅牢になっていきます。
- サイト改善アンケート|ご意見をお聞かせください(1分で終わります)
-
本サイトでは、みなさまの学習をよりサポートできるサービスを目指しております。
そのため、みなさまの「プログラミングを学習する理由」などをアンケート形式でお伺いしています。1分だけ、ご協力いただけますと幸いです。
【Python】サイト改善アンケート
練習問題:エラーの修正に挑戦しよう
この記事で学習した「エラーメッセージ」を復習する練習問題に挑戦しましょう。
問題|エラーメッセージを読んでエラーを修正しよう
以下のコードをコピーして実行してみましょう。
そうすると複数のエラーが発生しますので、表示されるエラーメッセージを参考にしてエラー箇所を特定し、正しいコードを書きましょう。
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と用語のまとめ
初心者がつまずきやすいポイントをFAQとしてまとめ、またよく使う専門用語をわかりやすく整理しました。
理解を深めたいときや、ふと疑問に感じたときに役立ててください。
FAQ|エラーメッセージに関するよくある質問
- Q1. Pythonの「SyntaxError」ってどんなときに出ますか?
-
文法ミス(カッコの閉じ忘れやコロンの付け忘れなど)のときに出るエラーです。
- Q2. 「NameError」の対処法はありますか?
-
未定義の変数を使った場合に出ます。変数名のスペルや定義の位置を確認しましょう。
- Q3. エラーが出たときに原因を調べるには?
-
トレースバック(エラーの表示メッセージ)を上から順に読み、どの行で何が原因かを確認することが重要です。
Python用語集|エラーメッセージに関する用語一覧
今回の記事で出てきた用語・関数などを一覧で紹介します。
このサイトに出てくる 全てのPython用語をまとめた用語集 も活用してください。
Python用語 | 定義・使い方の概要 |
---|---|
エラーメッセージ | プログラム実行中に発生した問題を知らせるメッセージ。原因を特定する手がかりとなる |
SyntaxError (構文エラー) | Pythonの文法に誤りがあるときに表示されるエラー |
NameError (名前エラー) | 存在しない変数や関数を参照したときに発生するエラー |
TypeError (型エラー) | 不適切なデータ型で操作を行ったときに発生するエラー |
IndexError (インデックスエラー) | シーケンス型(リストなど)の範囲外のインデックスにアクセスしたときに発生するエラー |
ValueError (値エラー) | 値の型は正しいが、内容が不適切な場合に発生するエラー(例:int("abc") ) |