エラー集

中級のエラー集

長いエラーの読み方から、KeyError・ValueError・UnicodeDecodeError・pandas の警告まで。エラーが出たときの辞書として、何度でも見返してください。

目安 25分 ・ インストール不要 ・ どのレッスンの途中からでも、気になるエラーだけ読めます

このエラー集を読んだら

「エラーの種類を見て、原因を絞り込み、直し方とAIへの渡し方を説明できる」と言える。

PART 1

中級のエラーは、長く見えるだけです

基礎編のエラー講座では、「最後の2行を読む」と学びました。中級になると、関数の中から関数を呼んだり、pandas を使ったりするので、エラーの表示(トレースバック)が何行も続くようになります。まず、長いエラーを出してみましょう。

関数の中で、エラーを出すコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

行が増えても、読み方は同じです。上から下へ、呼ばれた順に並んでいて、いちばん下が、実際に止まった場所です。

長いエラーを、日本語にする
File "<exec>", line 9, in <module>入口:9行目の print(total(...)) から始まった
File "<exec>", line 6, in totaltotal 関数の6行目で、to_yen を呼んだ(<genexpr> は、sum の中の for の意味)
File "<exec>", line 2, in to_yento_yen 関数の2行目で、実際に止まった
ValueError: invalid literal for int() ... '不明'「不明」は、int(整数)に変換できません
PART 2

中級でよく出会うエラーの早見表

エラー名は、暗記しなくて構いません。「こういうメッセージが出たら、ここを疑う」の目安として、辞書のように使ってください。

エラーひとことで言うとまず疑うこと
KeyError辞書や列に、その見出しがない列名の綴り、CSVの見えない文字(BOM)、前後の空白
IndexErrorリストに、その番号がない絞り込みの結果が空、列の足りない行
ValueError値の形が合わない"1,200" や "不明" を数字にしようとした
TypeError種類の合わない使い方関数の return の書き忘れ(結果が None)
AttributeErrorその持ち物(メソッド)がないNone に対して .strip() などを呼んだ
FileNotFoundErrorファイルやフォルダがない書き込み先のフォルダが、まだ無い
UnicodeDecodeError文字コードが合わないExcelのCSV(cp932)を utf-8 で開いた
ModuleNotFoundError部品が見つからないimport の綴り、インストール、自分のファイル名
IndentationError字下げがそろっていないAIのコードを貼ったときのずれ、タブとスペース
SettingWithCopyWarningpandas の注意(エラーではない)絞り込んだ表への書き込み
MergeError/行が増える結合のキーが重複している右側の表のキーの重複
InvalidOperationDecimal に変換できない"1,200" のような桁区切り
PART 3

データを読むときのエラー

KeyError(CSVの列名が見つからない)

Excelで「CSV UTF-8」として保存したファイルには、先頭に目に見えない印(BOM)が付くことがあります。見た目は同じ「日付」でも、Pythonには別の名前に見えます。

わざと出す:KeyErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

KeyError: '日付' は、「日付という見出しはない」という意味です。綴りが合っているのに出たら、列名の一覧を直接表示して確かめます。

直し方:列名を確かめ、utf-8-sig で開くコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

1つ目の '\ufeff日付' の先頭が、BOMです。utf-8-sig で開くと、取り除かれます。予防として、読み込んだ直後に print(列名の一覧) で確かめる習慣を付けましょう。

AIに渡す文章:KeyError

次のPythonコードで KeyError: '日付' が出ました。CSVには「日付」という列があるはずです。原因と直し方を教えてください。

【CSVの先頭2行(架空の値)】
日付,金額
2025-10-01,1200
【CSVの作り方】Excelで「CSV UTF-8」として保存した
【コード】(全体を貼る)
【エラーの全文】(全部を貼る)

IndexError(番号の範囲外)

基礎編では、リストの範囲外を、わざと出しました。中級で多いのは、絞り込みの結果が空だったときです。

わざと出す:IndexErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

条件に合う行が0件なので、rows[0](最初の1件)がありません。直し方は、取り出す前に、あるかどうかを確かめることです。if rows:(空でなければ)や、len(rows) の確認が使えます。予防は、絞り込みのあとに件数を表示することです。

AIに渡す文章:IndexError

次のコードで IndexError: list index out of range が出ました。絞り込みの結果が0件のときに出ていると思います。0件のときは「該当なし」と表示するように直してください。

【コード】(全体を貼る)
【エラーの全文】(全部を貼る)

ValueError(値の変換)

CSVの値は、すべて文字です。"1,200"(桁区切り付き)や "不明" を、int() で数字にしようとすると、出ます。

わざと出す:ValueErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

invalid literal for int() は、「整数として読めない文字」という意味で、カッコの後ろに問題の値が表示されます。桁区切りなら replace(",", "") で取り除きます。「不明」や空欄は、try / except ValueError(Lesson 09)で、捨てた件数を数えながら飛ばします。予防は、読み込んだ列に、数字以外が混ざっていないか、先に確かめることです。

AIに渡す文章:ValueError

次のコードで ValueError: invalid literal for int() with base 10: '1,200' が出ました。金額の列には、桁区切りのカンマ付きの値と、「不明」や空欄が混ざっています。変換できる値は変換し、変換できない行は、件数と内容を表示してスキップするように直してください。

【コード】(全体を貼る)

UnicodeDecodeError(文字コードが合わない)

古いシステムやExcelが出力したCSVは、cp932(Shift_JIS系)で保存されていることがあります。それを utf-8 で開くと、出ます。

わざと出す:UnicodeDecodeErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

「このバイトは、utf-8として読めない」という意味です。直し方は、open(..., encoding="cp932") に変えることです。分からなければ、utf-8、utf-8-sig、cp932 の順に試します(Lesson 19)。予防は、ファイルを受け取るときに、どの文字コードか、相手に確認しておくことです。

AIに渡す文章:UnicodeDecodeError

次のコードで UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 が出ました。CSVは、取引先のシステムから届いたものです。文字コードを判断する方法と、読み込み方を教えてください。

【コード】(全体を貼る)
【エラーの全文】(全部を貼る)

FileNotFoundError(書き込み先のフォルダがない)

基礎編では、「読むファイルがない」場合を扱いました。中級では、書き出すときにも出ます。書き込み先のフォルダが無いと、ファイルは作れません。

わざと出す:FileNotFoundErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

直し方は、先にフォルダを作ることです。pathlib の Path("output").mkdir(exist_ok=True)(Lesson 18)を、書き出しの前に1行足します。exist_ok=True は、「すでにあっても、エラーにしない」という指定です。

AIに渡す文章:FileNotFoundError

次のコードで FileNotFoundError: No such file or directory: 'output/report.csv' が出ました。ファイルを書き出すときの出力フォルダが、まだありません。フォルダがなければ作ってから書き出すように、直してください。

【コード】(全体を貼る)
PART 4

None が混ざるエラー

TypeError(return の書き忘れ)

関数に return を書き忘れると、結果は None(何もない、という値)になります。そのあとの計算で、止まります。

わざと出す:TypeErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

'NoneType' and 'int' と出たら、どこかで None が生まれています。計算の途中の値を print して、None が出る場所をたどると、関数の return の抜けに行き着きます。直し方は return price * 1.1 です。予防は、関数を作ったら、1回呼んで、戻り値を表示してみることです。

AIに渡す文章:TypeError

次のコードで TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' が出ました。関数 add_tax の結果が None になっているようです。原因を、どの行か指摘して、直してください。

【コード】(全体を貼る)
【エラーの全文】(全部を貼る)

AttributeError(None に対する操作)

もう1つ、None が原因のエラーです。「ない」データ(memo が空、など)に、文字の操作をすると出ます(Lesson 08)。

わざと出す:AttributeErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

「None には、strip という機能がない」という意味です。直し方は、先に None かどうかを確かめることです。(order["memo"] or "").strip() と書くと、None のときは空の文字として扱えます。予防は、外から届くデータには、「ない」場合がある、と考えておくことです。

AIに渡す文章:AttributeError

次のコードで AttributeError: 'NoneType' object has no attribute 'strip' が出ました。JSONの memo が null(None)の注文があります。None のときは空の文字として扱うように直してください。

【JSONの例(架空の値)】
{"id": "O-1001", "memo": null}
【コード】(全体を貼る)
PART 5

準備と、書き方のエラー

ModuleNotFoundError(部品が見つからない)

import した名前の部品が、見つからないときに出ます。

わざと出す:ModuleNotFoundErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

No module named 'panda' は、「panda という部品はない」という意味です。pandas の綴り違いでした。綴りが合っているのに出たら、部品が入っていないことが考えられます。自分のパソコンでは、pip install pandas(Lesson 30)で入れます。もう1つの落とし穴は、自分のファイルに部品と同じ名前を付けた場合です。pandas.py や csv.py というファイルを作ると、本物の代わりに読み込まれて、おかしくなります。

AIに渡す文章:ModuleNotFoundError

自分のパソコン(Windows、Python 3.12)で、次のコードを実行したら ModuleNotFoundError: No module named 'openpyxl' が出ました。インストールの手順を、初心者向けに教えてください。仮想環境を使っています。

【エラーの全文】(全部を貼る)

IndentationError(字下げのずれ)

AIのコードをコピーしたり、手で直したりしたときに、よく出ます。

わざと出す:IndentationErrorコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

unindent does not match any outer indentation level は、「字下げの深さが、どの段にも合っていません」という意味です。return を、for と同じ深さ(4つ)にそろえれば直ります。予防は、エディタの設定で、タブをスペース4つにすることです。

AIに渡す文章:IndentationError

次のコードで IndentationError: unindent does not match any outer indentation level が出ました。字下げをそろえて、全体を貼り直してください。内容は変えないでください。

【コード】(全体を貼る)
PART 6

pandas と Decimal のエラー

SettingWithCopyWarning(pandas の注意)

これはエラーではなく、警告です。結果は出ますが、「その書き方は、思ったとおりに動かないかもしれません」という知らせです。

わざと出す:SettingWithCopyWarningpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

big は、df から絞り込んだコピーなので、そこへ列を足すと、警告が出ます。コピーであることをはっきりさせるため、.copy() を付けます。

big = df[df["金額"] >= 100000].copy()
big["区分"] = "大口"

予防は、絞り込んだ表を新しく編集するときは、.copy() を付けることです(Chapter 6 の pandas のレッスンでも出てきます)。

AIに渡す文章:SettingWithCopyWarning

pandas で次のコードを実行すると、SettingWithCopyWarning が出ます。警告が出ない、正しい書き方に直してください。結果が変わらないことも説明してください。

【コード】(全体を貼る)
【警告の全文】(全部を貼る)

MergeError と、行が増える問題(結合)

結合(merge)では、キーの重複に注意します。エラーにならずに行が増えることのほうが、危険です。

わざと出す:行が増える/MergeErrorpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

「田中」が branches に2回あるため、田中の注文が2倍になり、12行が15行に増えました。売上の合計も、増えてしまいます。validate="many_to_one" を付けると、重複を見つけて MergeError で止まります。予防は、結合の前後で行数を表示することと、validate を付けることです(Lesson 23)。

AIに渡す文章:行が増える

pandas で2つの表を merge したら、行数が12行から15行に増えました。右側の表のキー「担当」に重複があると思います。重複している行を表示するコードと、validate="many_to_one" を付けた書き方を教えてください。

【コード】(全体を貼る)

InvalidOperation(Decimal に変換できない)

お金の計算で使う Decimal(Lesson 04)は、桁区切りのカンマを読めません。エラーの名前が少し違います。

わざと出す:InvalidOperationコードは書き換えられます
Ctrl / ⌘ + Enter でも実行
結果
▶ 実行を押すと、ここに結果が出ます

ConversionSyntax は、「数字の書き方として読めない」という意味です。Decimal("1,200".replace(",", "")) のように、カンマを取ってから渡します。予防は、Decimal に渡す前の値を、print(repr(値)) で確かめることです。

AIに渡す文章:InvalidOperation

次のコードで decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>] が出ました。金額の文字に、桁区切りのカンマや空欄が混ざっています。Decimal に渡す前に整える関数を書いてください。変換できない値は None を返してください。

【コード】(全体を貼る)
PART 7

AIに渡すときの、中級の心得

基礎編で学んだ「やりたいこと・コード全体・エラーの全文」の3点セットは、中級でも変わりません。次の3つを足すと、答えの精度が上がります。

  1. データの例:CSVやJSONの先頭の2〜3行を、架空の値に置き換えて添える(列名と形が伝わります)
  2. 試したこと:すでに試した直し方と、その結果
  3. 環境:Windows/Mac、Pythonのバージョン、自分のパソコンか、ブラウザの実行欄か
まとめ

エラーは、探す場所を教えてくれます

  • 長いエラーは、最後の1行と、自分のコードの行を読む
  • None が原因のエラー(TypeError/AttributeError)は、None が生まれた場所をたどる
  • データ由来のエラー(KeyError/ValueError/UnicodeDecodeError)は、値そのものを print して確かめる
  • pandas は、警告や行数の変化に気づく。結合の前後で、行数を確かめる
  • 直せないときは、データの例・試したこと・環境を添えて、AIに渡す