Pythonのエラー「TypeError: 'NoneType' object is not callable」の原因と解決策
最終更新日: 2026-08-27
30秒でわかる原因と解決策
原因: Pythonにおいて、値を持たないことを表す
None型のオブジェクトに対して、末尾に()をつけて関数のように呼び出そうとしたため発生します。 解決策: 変数名や関数の戻り値が意図せずNoneになっていないか確認し、オブジェクト自体を呼び出さないようにコードを修正します。
修正コード(Before / After)
❌ エラーが発生するコード
# 例1: ビルトイン関数名を変数として上書きしてしまった場合
list = [1, 2, 3]
# この後、list() を呼び出そうとすると NoneType エラーになる
new_list = list()
# 例2: 戻り値のないメソッドの結果を呼び出している場合
result = print("Hello")
result() # print() は None を返すため、NoneType error になる
⭕ 修正後の推奨コード
# 修正1: 予約語やビルトイン関数と同じ変数名を避ける
my_list = [1, 2, 3]
new_list = list(my_list) # 正しく組み込みの list() 関数を呼び出せる
# 修正2: 戻り値を確認し、関数として呼び出さないようにする
result = print("Hello")
# result() は削除または修正する
よくある発生パターンと解説
TypeError: 'NoneType' object is not callable は、Pythonで非常によくあるエラーの一つです。主に以下の2つのパターンで発生します。
1. ビルトイン関数や標準ライブラリ名を変数名に使ってしまった場合
Pythonの便利な組み込み関数(list, dict, str, int, print など)と同じ名前の変数を作ってしまうと、その変数に None や他の値が代入された瞬間、元の関数機能が上書きされてしまいます。その結果、後続のコードでその名前を関数として呼び出すと(例: list())、None(または非関数オブジェクト)を呼び出したことになり、このエラーが発生します。
2. 戻り値(返り値)がない関数やメソッドを呼び出している場合
例えば、リストの .append() メソッドや print() 関数は、処理を実行しますが戻り値として None を返します。
うっかり x = a.append(1) のように変数に代入したあと、その x() を実行しようとすると、x の中身が None であるためエラーになります。
よくある質問 (FAQ)
Q. エラーが発生している行が合っているか分かりません。どう特定すればいいですか?
A. エラーメッセージと一緒に表示される**トレースバック(Traceback)**を確認してください。「File “xxx.py”, line 10」のようにエラーが発生したファイルの行数が記載されています。その行周辺で、どの変数や関数が None になっているかを print() などでデバッグしてみましょう。
Q. 変数がどこで None になったか分からないときは?
A. 変数を定義している箇所までさかのぼり、意図したオブジェクト(関数やクラスなど)が正しく代入されているか確認してください。統合開発環境(IDE)のデバッガーを使って変数の値をステップ実行で追うのが最も確実です。