TypeError: 'tuple' object does not support item assignment の原因と直し方
タプルの要素を書き換えようとしたときに出るエラーです。丸括弧のタプルと角括弧のリストは見た目が似ていますが、変更可能かどうかが根本的に違います。
エラーメッセージの読み方
Traceback (most recent call last):
main.py- ファイル名
2- 行番号 — 実際にクラッシュした行
<module>- 発生場所 — <module> ならトップレベル、関数名ならその関数の中
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
'tuple' object does not support item assignment- 詳細メッセージ — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 point = (1, 2) ^ 2 point[0] = 5 3 print(point)
Traceback (most recent call last):
File "main.py", line 2, in <module>
point[0] = 5
~~~~~^^^
TypeError: 'tuple' object does not support item assignment
タプルは一度作ったら要素を変更できません。値を書き換えたい場合はリスト([])を使います。
直し方: (1, 2) を [1, 2] にします。
広告
広告スロット(未設定)
パターン2
1 colors = ("red", "green", "blue") ^ 2 colors[1] = "yellow" 3 print(colors)
Traceback (most recent call last):
File "main.py", line 2, in <module>
colors[1] = "yellow"
~~~~~~^^^
TypeError: 'tuple' object does not support item assignment
丸括弧のタプルと角括弧のリストは見た目が似ていますが、変更可能かどうかが根本的に違います。
直し方: ("red", "green", "blue") を ["red", "green", "blue"] にします。
パターン3
1 coords = (0, 0, 0) ^ 2 coords[2] = 9 3 print(coords)
Traceback (most recent call last):
File "main.py", line 2, in <module>
coords[2] = 9
~~~~~~^^^
TypeError: 'tuple' object does not support item assignment
後から要素を更新する前提のデータはタプルではなくリストで持つのが定石です。
直し方: (0, 0, 0) を [0, 0, 0] にします。
よくある誤解
リストと同じ感覚でタプルの要素を更新できると思いがちですが、タプルは作成後に中身を変更できない設計です。後から値を更新する前提のデータはリストで持ちます。
まとめ
TypeError: 'tuple' object does not support item assignmentは中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。