ホーム › エラー解決 › Python › AttributeError(NoneType)
Python ERROR

Python AttributeError: 'NoneType' object の原因と解決法

変数の中身がNoneになっているのにメソッドを呼ぶと発生します。「戻り値がNoneのメソッド」の結果を再代入してしまうのが典型パターンです。

このエラーメッセージ

AttributeError: 'NoneType' object has no attribute 'append'

原因

❌ エラーになるコード

NG
nums = [3, 1, 2]
nums = nums.sort()  # sort()はNoneを返す
nums.append(4)
print(nums)

✅ 修正したコード

OK
nums = [3, 1, 2]
nums.sort()  # その場で並べ替え(再代入しない)
nums.append(4)
print(nums)
# 新しいリストが欲しい場合は sorted() を使う
new_nums = sorted([30, 10, 20])
print(new_nums)
▶ 修正済みコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

list.sort()やappend()はリスト自体を変更してNoneを返すメソッドなので、結果を再代入してはいけません。並べ替えた新しいリストが欲しいときはsorted(nums)を使います。関数の戻り値を使う場合は、その関数がNoneを返す可能性がないかを確認しましょう。

よくある質問

どの変数がNoneか調べるには?
エラー行の直前でprint(type(変数))を実行するとかどうか確認できます。
sort()とsorted()の使い分けは?
元のリストを変更してよければsort()、元を残して新しいリストが欲しければsorted()です。