Code Fix

中級

TypeError: 'str' object does not support item assignment の原因と直し方

文字列の一部を直接書き換えようとしたときに出るエラーです。Pythonの文字列は不変(immutable)です。

エラーメッセージの読み方

Traceback (most recent call last):
main.py
ファイル名
2
行番号 — 実際にクラッシュした行
<module>
発生場所 — <module> ならトップレベル、関数名ならその関数の中
TypeError
例外クラス — 何が起きたか。ここを検索するのが最短です
'str' object does not support item assignment
詳細メッセージ — どの値が問題だったか

このエラーが出る典型パターン

パターン1

 1  name = "tom"
 2  name[0] = "T"        
              ^
 3  print(name)
Traceback (most recent call last): File "main.py", line 2, in <module> name[0] = "T" ~~~~^^^ TypeError: 'str' object does not support item assignment

文字列は不変(immutable)なので、一部だけを書き換えることはできません。新しい文字列を作って変数に代入し直します。

直し方: name[0] = "T"name = "T" + name[1:] にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  s = "hello"
 2  s[-1] = "O"     
            ^
 3  print(s)
Traceback (most recent call last): File "main.py", line 2, in <module> s[-1] = "O" ~^^^^ TypeError: 'str' object does not support item assignment

末尾の文字を変えたい場合も同様です。スライスで前半部分を取り出し、新しい文字をつなげて再代入します。

直し方: s[-1] = "O"s = s[:-1] + "O" にします。

この問題を解いてみる →

パターン3

 1  word = "cat"
 2  word[1] = "u"                  
                   ^
 3  print(word)
Traceback (most recent call last): File "main.py", line 2, in <module> word[1] = "u" ~~~~^^^ TypeError: 'str' object does not support item assignment

真ん中の文字を変える場合も、前後をスライスで切り出して新しい文字列に組み立て直します。

直し方: word[1] = "u"word = word[0] + "u" + word[2:] にします。

この問題を解いてみる →

よくある誤解

リストの要素のように書き換えられると思われがちですが、文字列は一度作られたら中身を変更できません。変更したい場合は新しい文字列を作って再代入します。

まとめ

TypeError: 'str' object does not support item assignmentは中級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)