Pythonのエラーメッセージの読み方!よくあるエラーと解決のヒントをまとめて解説
生徒
「Pythonを勉強していると、赤い文字のエラーが出てきて止まってしまいます…。これは一体何なんでしょうか?」
先生
「それはエラーメッセージといって、Pythonがプログラムを実行できなかった理由を教えてくれているんです。」
生徒
「エラーってこわいし、難しそうです…読み方もわかりません。」
先生
「大丈夫ですよ。エラーメッセージは怖いものではなく、正しく読めばプログラムの間違いを教えてくれる親切な案内板のようなものなんです。よくあるエラーとその解決方法を一緒に見ていきましょう。」
1. Pythonのエラーメッセージとは?
Pythonのエラーメッセージとは、プログラムの実行中に問題が発生したときに、Pythonが「どこで何がうまくいかなかったのか」を教えてくれるメッセージです。赤い文字が出ると不安になるかもしれませんが、実は“問題解決のためのヒント集”のような役割を持っています。
エラーメッセージには主に、エラーの種類(エラータイプ)、エラーが起きた行番号、そしてなぜそのエラーが起きたのかといった情報が含まれています。これらを読めるようになると、どこを直せばいいのか自然と分かるようになります。
まずは、代表的なエラーメッセージの形を見てみましょう。以下は、Pythonで非常によく見るエラーの例です。
Traceback (most recent call last):
File "main.py", line 1, in <module>
print(name)
NameError: name 'name' is not defined
このエラーは、「nameという変数を使おうとしたけれど、まだどこにも定義されていませんよ」という意味です。Pythonはこうして、どの行で何が足りなかったのかを丁寧に教えてくれます。
よりイメージしやすいように、簡単なサンプルをもう一つ見てみましょう。
print(age) # ageを使おうとしている
NameError: name 'age' is not defined
このように、エラーメッセージは「プログラムがどこで迷子になったのか」を教えてくれる案内板のような存在です。怖がる必要はまったくありません。むしろエラーを読む力がつくと、プログラミングがどんどん楽になっていきます。
2. よくあるPythonエラーと解決方法
初心者がよく出会うPythonのエラーと、その意味、そしてどう直せばよいかをやさしく説明します。
2-1. NameError(ネームエラー)
NameErrorは、「その名前の変数はまだ作られていませんよ」というエラーです。
print(user_name)
NameError: name 'user_name' is not defined
この場合、「user_name」という変数を使おうとしていますが、まだどこにも定義(変数を作ること)されていません。下記のように変数を作ればエラーは解消します。
user_name = "たろう"
print(user_name)
2-2. SyntaxError(シンタックスエラー)
SyntaxErrorは、「文法(構文)が間違っているよ」というエラーです。
print("こんにちは"
SyntaxError: unexpected EOF while parsing
この場合、カッコの閉じ忘れ(")が原因です。Pythonは文法にとても厳しいので、1つのカッコ忘れでも止まってしまいます。
print("こんにちは")
2-3. IndentationError(インデントエラー)
IndentationErrorは、「スペースやタブなどの字下げ(インデント)が正しくありません」というエラーです。
if True:
print("OK")
IndentationError: expected an indented block
Pythonでは、if文やループなどのブロック(かたまり)では、行の先頭にスペースを入れて字下げする必要があります。
if True:
print("OK")
2-4. TypeError(タイプエラー)
TypeErrorは、「データの種類が合わない操作をしていますよ」というエラーです。
age = 18
print("年齢は" + age)
TypeError: can only concatenate str (not "int") to str
文字列(str)と数値(int)をそのまま+でつなげることはできません。数値を文字列に変換する必要があります。
age = 18
print("年齢は" + str(age))
2-5. ZeroDivisionError(ゼロ割りエラー)
ZeroDivisionErrorは、「0で割ることはできません」というエラーです。
print(10 / 0)
ZeroDivisionError: division by zero
数学でも「0で割る」ことはできません。割る数が0にならないように注意しましょう。
denominator = 2
if denominator != 0:
print(10 / denominator)
3. エラーの場所の見つけ方
Pythonのエラーメッセージには、エラーが起きた行番号が書かれています。次の例を見てください。
File "main.py", line 3, in <module>
print(name)
この「line 3」という部分が、「3行目で問題が起きていますよ」と教えてくれています。エラーが出たら、まずその行を確認してみましょう。
4. トレースバックとは何か?
Traceback(トレースバック)とは、「どこからどこまでプログラムが実行されたか」を順番に示してくれる情報です。
初心者には難しく見えますが、下から上に読むことで、エラーがどこから来ているかがわかります。
基本的には、一番下の「エラータイプ」と「エラー内容」が重要です。
5. エラーはこわくない!ミスに気づけるチャンス
エラーは初心者にとって「こわいもの」と感じがちですが、実はエラーが出るからこそ、自分の間違いに気づくことができ、成長につながります。
「どうしてこのエラーが出たのか?」と読み解く練習を繰り返すことで、自然とプログラミングの理解が深まります。
エラーメッセージは「怒っている」のではなく、「やさしく教えてくれている先生」のような存在なのです。
まとめ
Pythonのエラーメッセージは、初心者の学習を妨げる壁に見えることが多いですが、実際には自分の書いたコードのどこに問題があるのかを丁寧に示してくれる重要な手がかりです。今回の記事では、Pythonがどのようにエラーを知らせてくれるのか、そしてよく出てくる代表的なエラーにはどんな種類があり、それぞれどんな意味を持っているかを順を追って整理しました。エラーは一見すると赤い文字で驚く人もいますが、その内容を読めば意外と素直に理由が書かれており、慣れてくるにつれて「むしろありがたい案内」に感じられるようになります。特にNameErrorやSyntaxErrorのような基本的なエラーは、初心者が必ず最初の段階で経験するものですので、落ち着いて読み、どこを直せばいいかを理解できるようになっていくことがとても大切です。 NameErrorは名前が定義されていない場合に起こるという極めて基本的なエラーで、変数を使う前に定義するというプログラミングの基本ルールを自然に身につけるきっかけになります。SyntaxErrorも文法のミスが原因で起こるため、かっこの閉じ忘れや記号の打ち間違いといった単純な原因が多いものです。これらのエラーは、最初は戸惑うかもしれませんが、経験を積むほど「自分がどこで間違えやすいか」が分かってきて、エラーメッセージを見る力が身につくようになります。また、IndentationErrorもPython特有の厳しさが表れるポイントで、インデントが構造を表す言語であることを理解する上で欠かせない経験です。字下げが一致しないだけでエラーになるのは一見不便に感じられますが、慣れると読みやすく整ったコードを書くための大切な習慣につながります。 さらに、TypeErrorやZeroDivisionErrorのようなタイプや数学的なルールに関わるエラーは、データの種類から処理の意味まで、プログラムの理解を深める機会になります。文字列と数値を混ぜてしまうとTypeErrorになることを経験することで、データの型を意識しながらコードを書く意識が自然に身につきます。また、ZeroDivisionErrorは単純でありながら実際のプログラムで遭遇することも多く、割り算を行うときに割る数が0ではないかを確認するような処理の重要性を理解するきっかけになります。こうしたエラーはどれも実務に直結していて、単なるミスの指摘ではなく「より安全で確実なコード」を書くためのヒントになっていることを意識すると、エラーを見る姿勢が大きく変わります。 エラーメッセージの読み解き方として、行番号を確認することの大切さも見逃せません。line 3 のように書かれている部分を見ることで、どの行に問題があるのかがすぐに分かるため、初心者でも落ち着いて修正に向かうことができます。また、Traceback全体を見ることで、どの関数や処理を経由してエラーに至ったかを理解できるようになります。最初は下から上に読むことすら戸惑うかもしれませんが、慣れてくるとTracebackが「コードの流れをたどる地図」のように見えるようになり、エラーの原因を正確に探し当てる実力が身についていきます。 エラーは決して「失敗」ではなく、コードの理解を深める最良のチャンスです。プログラミングは手を動かし、間違え、修正していくサイクルを繰り返すことで力がついていきます。今回紹介したエラーを自分でも再現してみたり、意図的にミスを作ってみたりすると、エラーメッセージの意味をさらに深く理解できるようになります。Pythonの学習においてエラーは避けては通れませんが、それを味方にして成長の糧としていけば、コードを書く力は確実に向上していきます。
サンプルコードで復習
# エラーを防ぎながら安全に処理する例
age = "20"
try:
print("年齢は" + age)
except TypeError:
print("年齢は" + str(age))
生徒「今回いろいろなエラーメッセージを見られて、最初よりだいぶ読みやすくなった気がします!」
先生「良いですね。エラーの意味が分かるようになると、直すスピードもどんどん上がっていきますよ。」
生徒「特にNameErrorやSyntaxErrorは、自分でもよく出してしまうので、原因が理解できて安心しました。」
先生「初心者のころに必ず通る道です。むしろ早いうちにたくさん経験したほうが、上達が早いですよ。」
生徒「Tracebackの読み方も最初は意味不明でしたが、下から読むということを知って目からウロコでした!」
先生「その調子で、エラーを怖がらずにどんどん試していきましょう。エラーは成長の道しるべですからね。」