基本的なエラーの全体像(構文エラーと実行時エラー)
Pythonの「エラー」は大きく、実行前に検出される構文エラーと、実行中に起きる例外(実行時エラー)に分かれます。構文エラーは文法違反が原因で、プログラムは開始できません。例外は文法は正しいが、処理時に不正な状態(ゼロ除算、範囲外アクセス、型不一致など)に遭遇して停止します。まずは「どの種類か」を見分けると、原因にまっすぐ辿り着けます。
構文エラーとインデントエラー(ここが重要)
SyntaxError(構文エラー)
文法ルールに違反したときに出ます。コロンの付け忘れ、括弧の閉じ忘れ、キーワードの誤用などが典型です。
# コロンの付け忘れ
if True
print("Hello")
# 括弧の閉じ忘れ
print("Hello"
Python修正は「メッセージの行番号付近」を丁寧に確認し、コロン、括弧、構文の必須要素を揃えることです。
IndentationError(インデントエラー)
Pythonはインデントが文法です。ブロックの深さが不一致、タブとスペースの混在などで起きます。
def greet():
print("こんにちは") # インデントが必要
Pythonエディタ設定で「タブ→スペース」「インデント幅4」を統一し、if/for/def/try の次行から必ずインデントを下げます。
名称・型・値まわりの基本的な例外
NameError(未定義名)
存在しない変数名や関数名を参照したときに出ます。
print(total) # total が定義されていない
Python対処は「定義の位置を確認」し、スコープ外参照やスペルミスを直します。
TypeError(型不一致)
不適切な型の組み合わせで演算・呼び出しをしたときに出ます。
print("年齢: " + 20) # 文字列と整数の加算は不可
len(10) # 数値に len は不可
Python必要なら型変換(str(20) など)や、対応するAPIへ置き換えます。
ValueError(値の不正)
型は合っているが、値が妥当でないときに出ます。
int("abc") # 整数に変換できない文字列
range(1, 1, 0) # step=0 は不正
Python前処理(strip/isdigit)や入力検証で妥当性を確認してから処理します。
コレクション関連の例外(ここが重要)
IndexError(範囲外インデックス)
リストやタプルで範囲外を参照したときに出ます。
a = [10, 20]
print(a[2]) # 0,1 までしかない
Python要素数のチェック(len)や安全なループ(for, enumerate)に切り替えます。
KeyError(辞書のキー不存在)
辞書に存在しないキーを参照したときに出ます。
user = {"name": "hanako"}
print(user["age"]) # 'age' キーがない
Pythonget でデフォルトを指定するか、キーの存在確認を行います。
print(user.get("age", "不明"))
PythonAttributeError(属性不存在)
オブジェクトにその属性やメソッドがないときに出ます。
text = "hello"
text.append("!") # 文字列に append はない
Python型に合ったAPIへ置き換える(文字列なら + や join など)か、オブジェクトの型を確認します。
算術・入出力・モジュールの例外
ZeroDivisionError(ゼロ除算)
0で割る演算を行ったときに出ます。
x = 10 / 0
Python分母が0でないことを事前に確認し、0なら特例処理やメッセージ提示へ分岐します。
FileNotFoundError(ファイル未発見)
指定パスのファイルが存在しないときに出ます。
open("missing.txt", "r", encoding="utf-8")
Python存在確認(Path.exists())や、作成モードで開く、パスの再確認を行います。
ImportError / ModuleNotFoundError(モジュール関連)
モジュールや名前が見つからないときに出ます。
from math import squaroot # スペルミス
import not_installed_pkg # 未インストール
Pythonスペルと存在を確認し、必要ならパッケージをインストール、相対/絶対インポートの見直しをします。
入力と制御の例外(対話処理で遭遇しやすい)
EOFError(入力終端)
標準入力が閉じている、または終端に達したときに input() で出ます。
try:
s = input()
except EOFError:
print("入力が終了しました")
PythonKeyboardInterrupt(Ctrl+C中断)
ユーザーが処理を中断したときに出ます。丁寧に終了処理へ移るのが定石です。
try:
long_running()
except KeyboardInterrupt:
print("\n中断されました。後始末します。")
Python例題で身につける(検証・修正の型)
例題1:入力変換の堅牢化(ValueError対策)
def read_age():
s = input("年齢(整数): ").strip()
try:
return int(s)
except ValueError:
print("整数で入力してください")
return None
Python例題2:辞書アクセスの安全化(KeyError対策)
def show_user(user: dict):
name = user.get("name", "名無し")
age = user.get("age")
print(f"名前: {name} / 年齢: {age if age is not None else '不明'}")
Python例題3:ファイル読み込みの分岐(FileNotFoundError対策)
from pathlib import Path
path = Path("data.txt")
if not path.exists():
print("ファイルがありません。初期データを作成します。")
else:
print(path.read_text(encoding="utf-8"))
Python例題4:ゼロ除算回避と特例処理(ZeroDivisionError対策)
def safe_div(a: float, b: float) -> float | None:
if b == 0:
print("分母が0のため計算できません")
return None
return a / b
Pythonトレースバックの読み方と直し方(重要ポイントを深掘り)
Pythonのエラー表示は「どのファイルの何行で、どんな種類のエラーが、なぜ起きたか」を教えてくれます。行番号の一番下にある「エラーの種類と説明」を起点に、「上のスタック」を逆順に追うと、原因の関数・呼び出し元が分かります。直すときは、まず再現する最小コードに切り詰め、種類の意味(NameErrorなら未定義、IndexErrorなら範囲外など)に対応する修正(定義追加、境界チェック、型変換)を行います。テストは境界値や空入力を含めて、同じ問題を再発しないことを確かめましょう。
まとめ
基本的なエラーは「構文の問題」か「実行時の不正状態」のどちらかに分類されます。SyntaxError/IndentationErrorはコロン・括弧・インデントを整える、NameError/TypeError/ValueErrorは定義・型・値の妥当性を確認する、IndexError/KeyError/AttributeErrorは範囲・存在・型に合わせたAPIへ修正する、ZeroDivisionErrorや入出力系は事前ガードと分岐を用意する。トレースバックを手がかりに最小再現で切り分け、境界テストを習慣化すれば、初心者でも落ち着いて原因を特定し、着実に直せるようになります。
