
🐍 はじめに
Pythonを使っていて、こんな英語のエラーに出会ったことはありませんか?
SyntaxError: invalid syntax
NameError: name 'x' is not defined
TypeError: unsupported operand type(s)
初心者にとって、これらの「英語で突然出てくる謎の言葉たち」は、ただでさえ難しいコードの理解をさらに遠ざける存在です。
このページでは、初心者がよく出会うPythonエラー100選を一挙に掲載し、それぞれに原因と対処法を添えてまとめました。まずはここを図鑑のように使って、分からないエラーを調べてみてください。
Pythonでよくある英語エラー100選(原因と対策)
構文エラー (Syntax Errors)
SyntaxError: invalid syntax
- 原因: Pythonの文法規則に違反している。括弧の閉じ忘れ、コロンの忘れ、キーワードのtypoなど。
- 対策: エラーメッセージが指す行とその周辺を注意深く確認する。IDEのエラーハイライトも活用する。
SyntaxError: unexpected EOF while parsing
- 原因: ファイルの終わり(EOF: End Of File)に到達しても、まだ開き括弧や引用符などが閉じられていない。
- 対策: 括弧
()
,[]
,{}
や引用符''
,""
の対応を確認する。
SyntaxError: EOL while scanning string literal
- 原因: 文字列リテラル(
''
や""
で囲まれた文字列)が、閉じられていないまま行の終わり(EOL: End Of Line)に達した。 - 対策: 文字列の閉じ引用符が抜けていないか確認する。複数行の文字列にはトリプルクォート
""" """
を使用する。
- 原因: 文字列リテラル(
SyntaxError: invalid character in identifier
- 原因: 変数名や関数名などに、Pythonの識別子として許可されていない文字(例:
-
,!
,@
など)が含まれている。 - 対策: 識別子には英数字とアンダースコア
_
のみを使用する。先頭は数字であってはならない。
- 原因: 変数名や関数名などに、Pythonの識別子として許可されていない文字(例:
SyntaxError: non-keyword arg after keyword arg
- 原因: 関数呼び出しで、キーワード引数(例:
func(a=1, b=2)
)の後に通常の(位置引数)引数を指定している。 - 対策: 位置引数をキーワード引数より前に配置する。例:
func(1, 2, a=3)
はOKだが、func(a=3, 1, 2)
はNG。
- 原因: 関数呼び出しで、キーワード引数(例:
SyntaxError: f-string: expecting '}'
- 原因: f-string (
f"..."
) 内の波括弧{}
が正しく閉じられていないか、式にエラーがある。 - 対策: f-string内の波括弧の対応と、中に記述されたPython式の文法を確認する。
- 原因: f-string (
SyntaxError: invalid decimal literal
- 原因: 数値リテラルが不正な形式で記述されている(例:
0o
の後に数字以外の文字、0b
の後に0と1以外など)。 - 対策: 数値の表記規則に従う。8進数なら
0o
、16進数なら0x
、2進数なら0b
の後に正しい数字を続ける。
- 原因: 数値リテラルが不正な形式で記述されている(例:
SyntaxError: cannot assign to literal
- 原因: リテラル(定数)に値を代入しようとしている。
- 対策: 代入の左辺は変数である必要がある。例:
5 = x
はNG。
SyntaxError: cannot assign to function call
- 原因: 関数呼び出しの結果に値を代入しようとしている。
- 対策: 代入の左辺は変数である必要がある。例:
my_list.append(item) = 5
はNG。
SyntaxError: 'return' outside function
- 原因: 関数定義の外で
return
ステートメントを使用している。 - 対策:
return
は関数の内部でのみ使用できる。
- 原因: 関数定義の外で
実行時エラー (Runtime Errors / Exceptions)
NameError, TypeError, ValueError
NameError: name 'variable_name' is not defined
- 原因: 存在しない変数、関数、クラスなどを参照しようとした。typo、スコープの問題、定義する前に使用しているなど。
- 対策: 変数名や関数名が正しいか確認し、使用する前に定義されていることを保証する。グローバル変数やローカル変数のスコープを理解する。
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- 原因: 型の異なるオブジェクトに対して、その型ではサポートされていない操作(例: 数値と文字列の加算)を行おうとした。
- 対策: 演算を行う前に、
int()
,str()
,float()
などを使って明示的に型変換(キャスト)を行う。
TypeError: 'int' object is not iterable
- 原因: 整数型(
int
)など、イテラブルではないオブジェクトに対してループ処理(for
ループなど)を行おうとした。 - 対策: ループの対象がリスト、タプル、文字列、辞書などのイテラブルなオブジェクトであることを確認する。
range()
関数を使うなど。
- 原因: 整数型(
TypeError: 'list' object is not callable
- 原因: リスト(または他のデータ構造)を変数として定義しているが、それを関数のように呼び出そうとした(例:
my_list()
)。 - 対策: 変数名の後に誤って括弧を付けていないか確認する。
- 原因: リスト(または他のデータ構造)を変数として定義しているが、それを関数のように呼び出そうとした(例:
TypeError: missing 1 required positional argument: 'arg_name'
- 原因: 関数呼び出し時に、必須の引数が渡されていない。
- 対策: 関数の定義を確認し、必要な引数をすべて渡す。
TypeError: 'str' object does not support item assignment
- 原因: 文字列はイミュータブル(変更不可能)であるため、文字列の特定の位置の文字を変更しようとした。
- 対策: 文字列は直接変更できない。新しい文字列を作成するか、リストに変換して変更し、再度文字列に変換する。
ValueError: invalid literal for int() with base 10: 'abc'
- 原因:
int()
関数などを用いて文字列を数値に変換しようとしたが、文字列が数値として解析できない形式であった。 - 対策: 変換する文字列が正しい数値形式であることを確認する。ユーザー入力の場合は、入力値の検証を行う。
- 原因:
ValueError: substring not found
- 原因:
str.index()
やstr.rindex()
など、指定された部分文字列が見つからない場合に発生する。 - 対策: 部分文字列が存在するかどうかを
in
演算子で事前に確認する(例:'sub' in my_string
)か、str.find()
(見つからない場合に-1を返す)を使用する。
- 原因:
ValueError: math domain error
- 原因:
math
モジュールの関数に、定義域外の引数(例:math.sqrt(-1)
)を渡した。 - 対策: 関数の定義域を確認し、適切な引数を渡すように入力値を検証する。
- 原因:
ValueError: not enough values to unpack (expected 2, got 1)
- 原因: 複数の変数に同時に値を代入(アンパック)しようとしたが、値の数が変数と一致しない。
- 対策: 代入する値の数と変数の数を一致させる。
IndexError, KeyError, AttributeError
IndexError: list index out of range
- 原因: リストやタプル、文字列などのシーケンス型に対して、存在しないインデックス(範囲外のインデックス)を指定してアクセスしようとした。
- 対策: インデックスがシーケンスの有効な範囲内(
0
からlen(sequence) - 1
)であることを確認する。ループの範囲や条件を再確認する。
KeyError: 'key_name'
- 原因: 辞書(dictionary)から存在しないキーを使って値を取得しようとした。
- 対策: 辞書にキーが存在することを確認する(例:
'key' in my_dict
)。または、dict.get(key, default_value)
メソッドを使用して、キーが存在しない場合にデフォルト値を返すようにする。
AttributeError: 'str' object has no attribute 'method_name'
- 原因: オブジェクトが持たない属性(メソッドやプロパティ)にアクセスしようとした。よくあるのは、型を誤解している場合。
- 対策: オブジェクトの型を確認し、その型が持つ属性やメソッドのドキュメントを参照する。typoがないか確認する。
AttributeError: 'NoneType' object has no attribute 'method_name'
- 原因: 変数が
None
であるにもかかわらず、その変数に対してメソッドや属性にアクセスしようとした。これは、関数が期待する値を返さずにNone
を返した場合などに起こる。 - 対策: 変数が
None
でないことを確認してから操作を行う(例:if obj is not None:
)。
- 原因: 変数が
File Handling Errors
FileNotFoundError: [Errno 2] No such file or directory: 'file.txt'
- 原因: 指定されたパスにファイルやディレクトリが存在しない。
- 対策: ファイル名とパスが正しいか、大文字小文字が区別されているか、カレントディレクトリが正しいかを確認する。
IOError: [Errno 22] Invalid argument
(Python 2.x) /OSError: [Errno 22] Invalid argument
(Python 3.x)- 原因: ファイルパスに無効な文字が含まれている、またはファイル名が長すぎるなど、OSが許可しない操作。
- 対策: ファイルパスがOSの命名規則に準拠しているか確認する。
PermissionError: [Errno 13] Permission denied: 'file.txt'
- 原因: ファイルやディレクトリへのアクセス権限がない。
- 対策: ファイル/ディレクトリのパーミッション(権限)を確認し、必要に応じて変更する。管理者権限で実行する必要がある場合もある。
IsADirectoryError: [Errno 21] Is a directory: 'dir_name'
- 原因: ファイル操作(例:
open()
)をディレクトリに対して行おうとした。 - 対策: 対象がファイルであることを確認するか、
os.path.isdir()
などを使ってディレクトリかどうかを判断する。
- 原因: ファイル操作(例:
NotADirectoryError: [Errno 20] Not a directory: 'file_name'
- 原因: ディレクトリ操作(例:
os.listdir()
)をファイルに対して行おうとした。 - 対策: 対象がディレクトリであることを確認するか、
os.path.isfile()
などを使ってファイルかどうかを判断する。
- 原因: ディレクトリ操作(例:
Other Common Runtime Errors
IndentationError: expected an indented block
- 原因:
if
,for
,while
,def
,class
などの後に続くブロックがインデントされていない。 - 対策: Pythonはインデントでコードブロックを識別するため、正しくインデントする。通常はスペース4つ。
- 原因:
IndentationError: unexpected indent
- 原因: 不要なインデントがある、または同じブロック内でインデントレベルが不揃い。
- 対策: 余計なインデントを削除するか、インデントが統一されていることを確認する。タブとスペースが混在していないか注意。
ZeroDivisionError: division by zero
- 原因: 数値をゼロで割ろうとした。
- 対策: 割り算を行う前に、分母がゼロでないことを確認する。
try-except
ブロックでエラーを捕捉する。
MemoryError
- 原因: プログラムが利用可能なメモリをすべて使い果たした。大量のデータをメモリに読み込んだり、無限ループでリストが膨張したりする場合。
- 対策: メモリ効率の良いデータ構造やアルゴリズムを使用する。ジェネレータを活用する。不要なオブジェクトを解放する。
RecursionError: maximum recursion depth exceeded
- 原因: 再帰関数が無限に呼び出されるか、非常に深いレベルまで呼び出され、Pythonの最大再帰深度制限を超えた。
- 対策: 再帰の終了条件が正しいか確認する。問題を反復処理に変換する。
sys.setrecursionlimit()
で制限を増やすことも可能だが推奨されない。
ImportError: No module named 'module_name'
- 原因: 存在しないモジュールをインポートしようとした。typo、モジュールがインストールされていない、パスが通っていないなど。
- 対策: モジュール名が正しいか確認する。
pip install module_name
でインストールする。環境変数PYTHONPATH
を確認する。
ModuleNotFoundError: No module named 'module_name'
(Python 3.6+)- 原因: 上記の
ImportError
と同じ理由で、Python 3.6以降で使われるようになったより具体的なエラー。 - 対策: 上記
ImportError
と同じ。
- 原因: 上記の
StopIteration
- 原因: イテレータの要素がすべて消費された後、さらに
next()
関数を呼び出そうとした。通常はfor
ループの内部で自動的に処理されるため、明示的にnext()
を使う場合に発生しやすい。 - 対策: イテレータの終端に達していないか確認する。
try-except StopIteration
で捕捉する。
- 原因: イテレータの要素がすべて消費された後、さらに
AssertionError
- 原因:
assert
ステートメントの条件がFalse
になった。開発者がプログラムの前提条件が満たされないことを検出するために使用する。 - 対策:
assert
の条件がなぜFalse
になったのか、プログラムのロジックや入力値を確認する。
- 原因:
NotImplementedError
- 原因: 抽象メソッドや、まだ実装されていないメソッドが呼び出された。通常、基底クラスで定義され、サブクラスでの実装を強制するために使われる。
- 対策: そのメソッドを呼び出す前に、適切なサブクラスで実装されていることを確認する。
DeprecationWarning
(Warningだがよく目にする)- 原因: 現在使用している関数やモジュールが非推奨(deprecated)になっている。将来のバージョンで削除される可能性がある。
- 対策: ドキュメントを確認し、推奨される新しい方法にコードを更新する。
UserWarning
(Warningだがよく目にする)- 原因: プログラムの特定の条件が満たされたが、それがエラーではないが注意すべき状況であることを開発者が意図的に警告している場合。
- 対策: 警告メッセージの内容を読んで、必要に応じてコードや設定を見直す。
RuntimeWarning
(Warningだがよく目にする)- 原因: 実行時に発生した潜在的な問題や異常な状況を知らせる警告。
- 対策: 警告メッセージの内容を読んで、コードの動作や環境設定を確認する。
その他の一般的なエラー/状況
UnboundLocalError: local variable 'x' referenced before assignment
- 原因: 関数内でローカル変数として宣言しようとしている変数に、その変数に値が代入される前にアクセスしようとした。
- 対策: 変数を使用する前に必ず初期化する。グローバル変数を参照したい場合は
global
キーワードを使用する(ただし、乱用は避ける)。
TypeError: object of type 'type' has no len()
- 原因:
len()
関数に、長さを取得できない型のオブジェクト(例: 数値型、NoneTypeなど)を渡した。 - 対策:
len()
の引数が、リスト、文字列、タプル、辞書などの長さを取得できる型であることを確認する。
- 原因:
TypeError: expected 1 arguments, got 0
- 原因: 引数を期待する関数に、引数を渡さずに呼び出した。
- 対策: 関数定義を確認し、必要な引数を渡す。
TypeError: __init__ missing 1 required positional argument: 'arg_name'
- 原因: クラスのコンストラクタ(
__init__
メソッド)が必須の引数を求めているのに、オブジェクト作成時にその引数を渡さなかった。 - 対策: オブジェクトをインスタンス化する際に、コンストラクタが必要とするすべての引数を渡す。
- 原因: クラスのコンストラクタ(
TypeError: argument of type 'int' is not iterable
- 原因:
for
ループやmap
,filter
などのイテレーションが必要な操作に、整数を渡した。 - 対策: イテラブルなオブジェクト(リスト、文字列、
range()
など)を渡す。
- 原因:
TypeError: can only concatenate str (not "int") to str
- 原因: 文字列と数値を
+
演算子で結合しようとした。 - 対策: 数値を
str()
で文字列に変換してから結合する。または、f-stringを使用する。
- 原因: 文字列と数値を
OverflowError: math range error
- 原因: 数値計算の結果が、表現可能な最大値を超えた。
- 対策: 巨大な数を扱う必要がある場合は、
Decimal
モジュールやfractions
モジュールを使用するか、アルゴリズムを見直す。
BlockingIOError: [Errno 11] Resource temporarily unavailable
- 原因: ノンブロッキングモードのI/O操作で、データがすぐに利用可能でないか、すぐに書き込み可能でない場合に発生。
- 対策: I/O操作をリトライするか、ブロッキングモードに切り替えるか、非同期I/Oの適切な設計を行う。
BrokenPipeError: [Errno 32] Broken pipe
- 原因: パイプやソケットの通信相手が、データの送信中に接続を切断した。
- 対策: 通信相手のプロセスが正常に動作しているか確認する。通信エラー処理を実装する。
ConnectionRefusedError: [Errno 111] Connection refused
- 原因: 接続しようとしたサーバーが接続を拒否した。サーバーが起動していない、ポートが間違っている、ファイアウォールがブロックしているなど。
- 対策: サーバーが起動しているか、ポート番号が正しいか、ファイアウォール設定を確認する。
ConnectionResetError: [Errno 104] Connection reset by peer
- 原因: 接続が相手側によって強制的に閉じられた。ネットワークの問題や相手側アプリケーションのクラッシュなど。
- 対策: ネットワーク接続を確認する。エラーハンドリングでリトライロジックを実装する。
TimeoutError: [Errno 110] Connection timed out
- 原因: ネットワーク操作や外部リソースへの接続が、指定された時間内に完了しなかった。
- 対策: タイムアウト値を長く設定する。ネットワーク接続を確認する。外部リソースの可用性を確認する。
Permission denied: '<path>'
(OSエラーの一般的なメッセージ)- 原因: ファイルやディレクトリへの読み書き権限がない。
- 対策: 該当ファイル/ディレクトリのパーミッションを変更する。管理者権限で実行する。
Disk full: '<path>'
(OSエラーの一般的なメッセージ)- 原因: ディスクの空き容量がない。
- 対策: ディスクの空き容量を増やす。
OSError: [WinError 123] The filename, directory name, or volume label syntax is incorrect:
(Windows特有)- 原因: Windows環境でのファイルパスに無効な文字が含まれている。
- 対策: ファイルパスがWindowsの命名規則に準拠しているか確認する。
RecursionError: maximum recursion depth exceeded in comparison
- 原因: 再帰的なデータ構造(例: 相互参照するオブジェクト)を比較しようとした際に、比較処理が無限に再帰してしまった。
- 対策: 比較処理のロジックを見直すか、再帰的なデータ構造の設計を修正する。
IndentationError: unindent does not match any outer indentation level
- 原因: インデントのレベルが、以前のインデントレベルのいずれとも一致しない(タブとスペースの混在などで発生しやすい)。
- 対策: インデントを統一する。エディタの機能でタブをスペースに変換する、またはその逆を行う。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 0: invalid start byte
- 原因: バイト列をUnicode文字列にデコードしようとしたが、指定されたエンコーディング(この場合は
utf-8
)でデコードできないバイトシーケンスが含まれていた。 - 対策: ファイルの実際のエンコーディングを確認し、
open()
関数でencoding
引数を正しく指定する(例:encoding='shift_jis'
)。
- 原因: バイト列をUnicode文字列にデコードしようとしたが、指定されたエンコーディング(この場合は
UnicodeEncodeError: 'sjis' codec can't encode character '\uXXXX' in position X: illegal multibyte sequence
- 原因: Unicode文字列を特定のエンコーディング(この場合は
sjis
)のバイト列にエンコードしようとしたが、そのエンコーディングで表現できない文字が含まれていた。 - 対策: 目的のエンコーディングで表現可能な文字のみを使用するか、より広範な文字セットをサポートするエンコーディング(例:
utf-8
)を使用する。
- 原因: Unicode文字列を特定のエンコーディング(この場合は
BlockingIOError: [Errno 11] Resource temporarily unavailable
- 原因: ノンブロッキングI/O操作で、データがまだ準備できていない、または書き込みバッファがいっぱいである場合に発生。
- 対策: I/O操作を再試行するか、
select
やasyncio
などの非同期フレームワークを利用する。
ImportError: cannot import name 'name' from 'module'
- 原因: モジュール内に存在しない関数、クラス、または変数を
from ... import ...
でインポートしようとした。 - 対策: インポートする名前がモジュール内に存在するか、typoがないか確認する。
- 原因: モジュール内に存在しない関数、クラス、または変数を
SystemError: Parent module '<module_name>' not loaded, cannot perform relative import
- 原因: 相対インポート(例:
from . import other_module
)を使用しているが、それがパッケージの構造内で正しく実行されていない(例: スクリプトをトップレベルで直接実行した場合など)。 - 対策: プロジェクトをパッケージとして適切に構成し、モジュールをトップレベルスクリプトとして直接実行するのではなく、パッケージの一部としてインポートされるようにする。
- 原因: 相対インポート(例:
RecursionError: maximum recursion depth exceeded while calling a Python object
- 原因: 再帰関数の呼び出しが深くなりすぎた。
- 対策: 再帰の終了条件を見直す。イテレーションに切り替える。
TabError: inconsistent use of tabs and spaces in indentation
- 原因: 同じファイル内でインデントにタブとスペースが混在している。
- 対策: エディタの設定でタブをスペースに変換するように設定し、すべてのインデントをスペースに統一する。
TypeError: object of type 'set' has no len()
- 原因: これは誤り。
set
型はlen()
をサポートします。もしこのエラーが出たら、セット以外の型にlen()
を使っている可能性があります。 - 対策:
len()
の対象が正しくset
オブジェクトであることを確認する。
- 原因: これは誤り。
TypeError: unhashable type: 'list'
- 原因: リスト(または他の変更可能な型)を、辞書のキーやセットの要素として使用しようとした。辞書のキーやセットの要素はハッシュ可能でなければならない。
- 対策: タプルなどの変更不可能な型を使用するか、ハッシュ可能な代替手段を検討する。
StopAsyncIteration
- 原因: 非同期イテレータの要素がすべて消費された後、さらに
__anext__
を呼び出そうとした。async for
ループの終端で発生する。 - 対策: 非同期イテレータの終端に達していないか確認する。通常は
async for
で自動的に処理される。
- 原因: 非同期イテレータの要素がすべて消費された後、さらに
SystemExit
- 原因:
sys.exit()
が呼び出されたか、スクリプトが異常終了した。これはエラーではなく、プログラムの終了を示す例外。 - 対策: プログラムが意図した通りに終了したか確認する。
try-except SystemExit
で捕捉して終了処理を行うことも可能。
- 原因:
KeyboardInterrupt
- 原因: ユーザーがCtrl+Cなどでプログラムの実行を中断した。
- 対策: 通常はプログラムの終了を意図しているため問題ないが、特定のクリーンアップ処理を行いたい場合は
try-except KeyboardInterrupt
で捕捉する。
BlockingIOError: [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request
(Windows特有)- 原因: 非同期I/O操作が、スレッドの終了やアプリケーションからの要求によって中断された。
- 対策: 非同期処理の終了条件やキャンセル処理を適切に実装する。
MemoryError: Unable to allocate ... bytes
- 原因: 上記の
MemoryError
と同様、必要なメモリ量を割り当てられなかった。 - 対策: メモリ使用量を削減するアルゴリズムやデータ構造を検討する。
- 原因: 上記の
ValueError: invalid literal for int() with base 10: ''
- 原因: 空文字列を
int()
に渡して数値に変換しようとした。 - 対策: 空文字列でないことを確認してから変換するか、エラーハンドリングを行う。
- 原因: 空文字列を
TypeError: 'method' object is not subscriptable
- 原因: メソッドを辞書やリストのように
[]
でインデックスアクセスしようとした。 - 対策: メソッドを呼び出すには
()
を使用する。
- 原因: メソッドを辞書やリストのように
TypeError: 'function' object is not subscriptable
- 原因: 関数を辞書やリストのように
[]
でインデックスアクセスしようとした。 - 対策: 関数を呼び出すには
()
を使用する。
- 原因: 関数を辞書やリストのように
TypeError: 'NoneType' object is not subscriptable
- 原因:
None
であるオブジェクトに対して、[]
でインデックスアクセスしようとした。 - 対策: 変数が
None
でないことを確認してからアクセスする。
- 原因:
SyntaxError: positional argument follows keyword argument
- 原因: 関数定義において、キーワード引数(デフォルト値を持つ引数)の後に、デフォルト値を持たない位置引数を記述した。
- 対策: デフォルト値を持つ引数は、デフォルト値を持たない引数よりも後に配置する。
TypeError: object of type 'int' has no len()
- 原因: 整数型に対して
len()
関数を呼び出そうとした。 - 対策:
len()
はシーケンスやコレクションに対してのみ適用可能。
- 原因: 整数型に対して
NotImplementedError: Method <method_name> is not implemented
- 原因: 抽象基底クラスやインターフェースのメソッドをオーバーライドせずに呼び出した、または明示的に
NotImplementedError
を発生させている箇所を呼び出した。 - 対策: サブクラスでそのメソッドを適切に実装する。
- 原因: 抽象基底クラスやインターフェースのメソッドをオーバーライドせずに呼び出した、または明示的に
TypeError: zip argument #1 must support iteration
- 原因:
zip()
関数にイテラブルではない引数(例: 整数)を渡した。 - 対策:
zip()
に渡す引数がすべてイテラブルであることを確認する。
- 原因:
ValueError: empty separator
- 原因:
str.split()
やre.split()
などで、空文字列を区切り文字として指定しようとした。 - 対策: 区切り文字には有効な文字列を指定する。空白で分割したい場合は引数なしの
split()
を使う。
- 原因:
AttributeError: 'module' object has no attribute 'attribute_name'
- 原因: インポートしたモジュールに存在しない属性(関数、変数など)にアクセスしようとした。
- 対策: モジュールのドキュメントを確認し、正しい属性名を使用する。
TypeError: can't multiply sequence by non-int of type 'float'
- 原因: リストなどのシーケンスを浮動小数点数で乗算しようとした(シーケンスの乗算は整数での繰り返しのみ可能)。
- 対策: 各要素に個別に浮動小数点数を乗算するループ処理や、リスト内包表記を使用する。
StopIteration: generator didn't yield any values
(ジェネレータが空の場合に発生しうる)- 原因: ジェネレータが値を生成しなかった場合に、
next()
を呼び出した。 - 対策: ジェネレータが空でないことを確認するか、
next()
をtry-except StopIteration
で囲む。
- 原因: ジェネレータが値を生成しなかった場合に、
SystemError: bad argument to internal function
- 原因: Pythonインタープリタの内部関数に不正な引数が渡されたことを示す、まれなエラー。通常はC拡張モジュールのバグなど。
- 対策: 使用しているライブラリのバージョンを確認し、最新版に更新する。バグ報告を検討する。
TypeError: 'type' object is not subscriptable
- 原因: クラスそのものに対して
[]
を使ってインデックスアクセスしようとした(インスタンスではなくクラス名に)。 - 対策: クラスのインスタンスを作成してから、そのインスタンスに対して操作を行う。
- 原因: クラスそのものに対して
SyntaxError: Cannot use a
breakstatement outside of a loop
- 原因:
for
やwhile
ループの外でbreak
ステートメントを使用している。 - 対策:
break
はループの内部でのみ使用できる。
- 原因:
SyntaxError: Cannot use a
continuestatement outside of a loop
- 原因:
for
やwhile
ループの外でcontinue
ステートメントを使用している。 - 対策:
continue
はループの内部でのみ使用できる。
- 原因:
ReferenceError: weakly-referenced object no longer exists
- 原因: 弱参照(weak reference)で参照されていたオブジェクトがガベージコレクションによって削除された後に、その弱参照を介してオブジェクトにアクセスしようとした。
- 対策: 弱参照のライフサイクルを理解し、オブジェクトがまだ存在するかどうかを確認してからアクセスする。
BlockingIOError: [Errno 107] Transport endpoint is not connected
- 原因: ソケットがまだ接続されていない、または切断されたソケットに対してI/O操作を行おうとした。
- 対策: ソケットが接続状態であることを確認してから操作を行う。
ConnectionAbortedError: [Errno 103] Software caused connection abort
- 原因: 接続相手のソフトウェアが接続を予期せず中止した。
- 対策: 接続相手のアプリケーションログを確認する。通信エラー処理を実装する。
RecursionError: too many levels of recursion for the given arguments
- 原因: 再帰関数が指定された引数に対して過度に深い再帰を試みた。
- 対策: 再帰の終了条件とロジックを見直す。
ValueError: invalid literal for float(): 'abc'
- 原因:
float()
関数に、浮動小数点数として解析できない文字列を渡した。 - 対策: 変換する文字列が正しい浮動小数点数形式であることを確認する。
- 原因:
TypeError: 'set' object is not subscriptable
- 原因: セットは順序を持たないため、インデックスアクセス(
set[0]
など)しようとした。 - 対策: セットの要素にアクセスするには、ループでイテレートするか、要素が存在するかどうかを
in
演算子で確認する。特定の要素が必要なら、リストに変換してからインデックスアクセスする。
- 原因: セットは順序を持たないため、インデックスアクセス(
TypeError: 'tuple' object does not support item assignment
- 原因: タプルはイミュータブル(変更不可能)であるため、タプルの特定の位置の要素を変更しようとした。
- 対策: タプルは直接変更できない。新しいタプルを作成するか、リストに変換して変更し、再度タプルに変換する。
TypeError: list indices must be integers or slices, not str
- 原因: リストに文字列をインデックスとして使用しようとした(辞書のように)。
- 対策: リストのインデックスは整数かスライスである必要がある。文字列でアクセスしたい場合は辞書を使用する。
SyntaxError: invalid escape sequence '\{'
- 原因: 文字列リテラル内で、バックスラッシュ
\
の後に認識されないエスケープシーケンスが続いた。 - 対策: エスケープしたい文字(例:
\
自体)は正しくエスケープする(例:\\
)。正規表現でバックスラッシュを文字として扱いたい場合はraw文字列(r'...'
)を使用する。
- 原因: 文字列リテラル内で、バックスラッシュ
TypeError: an integer is required (got type str)
- 原因: 整数を期待する場所に文字列を渡した。
- 対策: 整数を必要とする操作を行う前に、
int()
などで文字列を整数に変換する。
SystemError: <built-in function object_name> returned a result with an error set
- 原因: Pythonの組み込み関数やC拡張モジュールが、エラー状態のまま制御を返してしまった場合に発生する、比較的稀で深刻なエラー。通常はPythonインタープリタや外部ライブラリのバグ。
- 対策: Pythonのバージョンを更新する。使用しているライブラリのバージョンを確認し、最新版に更新する。問題が再現可能であれば、バグとして報告することを検討する。
🌕 今後の展開
このページは「図鑑」として全体を網羅することを目的としていますが、今後は以下のような記事に個別に展開していく予定です:
- 「SyntaxErrorってなに?」 → 初心者でもわかる図解付き解説
- 「NameErrorの原因とよくあるパターン」 → チェックリスト形式
- 「TypeErrorの具体例」 → 型の違いによる比較
これらの個別記事には、このページからリンクしていきます。
📌 おわりに
プログラミングの学習は、エラーとの対話です。 でも、それは決して「失敗」ではなく、「対話の入り口」でもあります。
あなたが出会ったエラーは、次の誰かの役に立つかもしれません。 ぜひ、共有・ブックマーク・リンクして、仲間にも広げてくださいね。