エラー集
中級のエラー集
長いエラーの読み方から、KeyError・ValueError・UnicodeDecodeError・pandas の警告まで。エラーが出たときの辞書として、何度でも見返してください。
このエラー集を読んだら
「エラーの種類を見て、原因を絞り込み、直し方とAIへの渡し方を説明できる」と言える。
中級のエラーは、長く見えるだけです
基礎編のエラー講座では、「最後の2行を読む」と学びました。中級になると、関数の中から関数を呼んだり、pandas を使ったりするので、エラーの表示(トレースバック)が何行も続くようになります。まず、長いエラーを出してみましょう。
▶ 実行を押すと、ここに結果が出ます
行が増えても、読み方は同じです。上から下へ、呼ばれた順に並んでいて、いちばん下が、実際に止まった場所です。
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(整数)に変換できません中級でよく出会うエラーの早見表
エラー名は、暗記しなくて構いません。「こういうメッセージが出たら、ここを疑う」の目安として、辞書のように使ってください。
| エラー | ひとことで言うと | まず疑うこと |
|---|---|---|
| KeyError | 辞書や列に、その見出しがない | 列名の綴り、CSVの見えない文字(BOM)、前後の空白 |
| IndexError | リストに、その番号がない | 絞り込みの結果が空、列の足りない行 |
| ValueError | 値の形が合わない | "1,200" や "不明" を数字にしようとした |
| TypeError | 種類の合わない使い方 | 関数の return の書き忘れ(結果が None) |
| AttributeError | その持ち物(メソッド)がない | None に対して .strip() などを呼んだ |
| FileNotFoundError | ファイルやフォルダがない | 書き込み先のフォルダが、まだ無い |
| UnicodeDecodeError | 文字コードが合わない | ExcelのCSV(cp932)を utf-8 で開いた |
| ModuleNotFoundError | 部品が見つからない | import の綴り、インストール、自分のファイル名 |
| IndentationError | 字下げがそろっていない | AIのコードを貼ったときのずれ、タブとスペース |
| SettingWithCopyWarning | pandas の注意(エラーではない) | 絞り込んだ表への書き込み |
| MergeError/行が増える | 結合のキーが重複している | 右側の表のキーの重複 |
| InvalidOperation | Decimal に変換できない | "1,200" のような桁区切り |
データを読むときのエラー
KeyError(CSVの列名が見つからない)
Excelで「CSV UTF-8」として保存したファイルには、先頭に目に見えない印(BOM)が付くことがあります。見た目は同じ「日付」でも、Pythonには別の名前に見えます。
▶ 実行を押すと、ここに結果が出ます
KeyError: '日付' は、「日付という見出しはない」という意味です。綴りが合っているのに出たら、列名の一覧を直接表示して確かめます。
▶ 実行を押すと、ここに結果が出ます
1つ目の '\ufeff日付' の先頭が、BOMです。utf-8-sig で開くと、取り除かれます。予防として、読み込んだ直後に print(列名の一覧) で確かめる習慣を付けましょう。
AIに渡す文章:KeyError
次のPythonコードで KeyError: '日付' が出ました。CSVには「日付」という列があるはずです。原因と直し方を教えてください。 【CSVの先頭2行(架空の値)】 日付,金額 2025-10-01,1200 【CSVの作り方】Excelで「CSV UTF-8」として保存した 【コード】(全体を貼る) 【エラーの全文】(全部を貼る)
IndexError(番号の範囲外)
基礎編では、リストの範囲外を、わざと出しました。中級で多いのは、絞り込みの結果が空だったときです。
▶ 実行を押すと、ここに結果が出ます
条件に合う行が0件なので、rows[0](最初の1件)がありません。直し方は、取り出す前に、あるかどうかを確かめることです。if rows:(空でなければ)や、len(rows) の確認が使えます。予防は、絞り込みのあとに件数を表示することです。
AIに渡す文章:IndexError
次のコードで IndexError: list index out of range が出ました。絞り込みの結果が0件のときに出ていると思います。0件のときは「該当なし」と表示するように直してください。 【コード】(全体を貼る) 【エラーの全文】(全部を貼る)
ValueError(値の変換)
CSVの値は、すべて文字です。"1,200"(桁区切り付き)や "不明" を、int() で数字にしようとすると、出ます。
▶ 実行を押すと、ここに結果が出ます
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 で開くと、出ます。
▶ 実行を押すと、ここに結果が出ます
「このバイトは、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(書き込み先のフォルダがない)
基礎編では、「読むファイルがない」場合を扱いました。中級では、書き出すときにも出ます。書き込み先のフォルダが無いと、ファイルは作れません。
▶ 実行を押すと、ここに結果が出ます
直し方は、先にフォルダを作ることです。pathlib の Path("output").mkdir(exist_ok=True)(Lesson 18)を、書き出しの前に1行足します。exist_ok=True は、「すでにあっても、エラーにしない」という指定です。
AIに渡す文章:FileNotFoundError
次のコードで FileNotFoundError: No such file or directory: 'output/report.csv' が出ました。ファイルを書き出すときの出力フォルダが、まだありません。フォルダがなければ作ってから書き出すように、直してください。 【コード】(全体を貼る)
None が混ざるエラー
TypeError(return の書き忘れ)
関数に return を書き忘れると、結果は None(何もない、という値)になります。そのあとの計算で、止まります。
▶ 実行を押すと、ここに結果が出ます
'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)。
▶ 実行を押すと、ここに結果が出ます
「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}
【コード】(全体を貼る)準備と、書き方のエラー
ModuleNotFoundError(部品が見つからない)
import した名前の部品が、見つからないときに出ます。
▶ 実行を押すと、ここに結果が出ます
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のコードをコピーしたり、手で直したりしたときに、よく出ます。
▶ 実行を押すと、ここに結果が出ます
unindent does not match any outer indentation level は、「字下げの深さが、どの段にも合っていません」という意味です。return を、for と同じ深さ(4つ)にそろえれば直ります。予防は、エディタの設定で、タブをスペース4つにすることです。
AIに渡す文章:IndentationError
次のコードで IndentationError: unindent does not match any outer indentation level が出ました。字下げをそろえて、全体を貼り直してください。内容は変えないでください。 【コード】(全体を貼る)
pandas と Decimal のエラー
SettingWithCopyWarning(pandas の注意)
これはエラーではなく、警告です。結果は出ますが、「その書き方は、思ったとおりに動かないかもしれません」という知らせです。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
big は、df から絞り込んだコピーなので、そこへ列を足すと、警告が出ます。コピーであることをはっきりさせるため、.copy() を付けます。
big = df[df["金額"] >= 100000].copy()
big["区分"] = "大口"予防は、絞り込んだ表を新しく編集するときは、.copy() を付けることです(Chapter 6 の pandas のレッスンでも出てきます)。
AIに渡す文章:SettingWithCopyWarning
pandas で次のコードを実行すると、SettingWithCopyWarning が出ます。警告が出ない、正しい書き方に直してください。結果が変わらないことも説明してください。 【コード】(全体を貼る) 【警告の全文】(全部を貼る)
MergeError と、行が増える問題(結合)
結合(merge)では、キーの重複に注意します。エラーにならずに行が増えることのほうが、危険です。
この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。
▶ 実行を押すと、ここに結果が出ます
「田中」が 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)は、桁区切りのカンマを読めません。エラーの名前が少し違います。
▶ 実行を押すと、ここに結果が出ます
ConversionSyntax は、「数字の書き方として読めない」という意味です。Decimal("1,200".replace(",", "")) のように、カンマを取ってから渡します。予防は、Decimal に渡す前の値を、print(repr(値)) で確かめることです。
AIに渡す文章:InvalidOperation
次のコードで decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>] が出ました。金額の文字に、桁区切りのカンマや空欄が混ざっています。Decimal に渡す前に整える関数を書いてください。変換できない値は None を返してください。 【コード】(全体を貼る)
AIに渡すときの、中級の心得
基礎編で学んだ「やりたいこと・コード全体・エラーの全文」の3点セットは、中級でも変わりません。次の3つを足すと、答えの精度が上がります。
- データの例:CSVやJSONの先頭の2〜3行を、架空の値に置き換えて添える(列名と形が伝わります)
- 試したこと:すでに試した直し方と、その結果
- 環境:Windows/Mac、Pythonのバージョン、自分のパソコンか、ブラウザの実行欄か
エラーは、探す場所を教えてくれます
- 長いエラーは、最後の1行と、自分のコードの行を読む
Noneが原因のエラー(TypeError/AttributeError)は、Noneが生まれた場所をたどる- データ由来のエラー(
KeyError/ValueError/UnicodeDecodeError)は、値そのものをprintして確かめる - pandas は、警告や行数の変化に気づく。結合の前後で、行数を確かめる
- 直せないときは、データの例・試したこと・環境を添えて、AIに渡す