ホーム ›
エラー解決 › Python › AttributeError(NoneType)
Python ERROR
Python AttributeError: 'NoneType' object の原因と解決法
変数の中身がNoneになっているのにメソッドを呼ぶと発生します。「戻り値がNoneのメソッド」の結果を再代入してしまうのが典型パターンです。
このエラーメッセージ
AttributeError: 'NoneType' object has no attribute 'append'
原因
- sort()やappend()など、Noneを返すメソッドの結果を変数に再代入している
- 関数がreturnを忘れていてNoneを返している
- 検索系の処理が「見つからない=None」を返すケースを想定していない
❌ エラーになるコード
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()です。