ホーム ›
エラー解決 › Python › TypeError(str+int)
Python ERROR
Python TypeError: can only concatenate str の解決法
文字列と数値をそのまま<code>+</code>でつなごうとすると起きるエラーです。5つの原因パターンと、逆順・input()・リストで出る別メッセージの違いまで解説します。
このエラーメッセージ
TypeError: can only concatenate str (not "int") to str
原因
- 文字列と数値(int/float)を
+ で連結しようとしている — Pythonは自動で型変換しません。
- input()の戻り値をそのまま数値として扱っている — input()は常にstr型を返します。
- 「数値 + 文字列」の逆順で書いている — この場合は別メッセージ
unsupported operand type(s) for +になります。
- リストに文字列を+で足そうとしている —
can only concatenate list (not "str") to listという別エラーです。
- print()の引数を全部+でつなごうとしている — カンマ区切りにすれば型変換不要です。
❌ エラーになるコード
NG
age = 20
print("私は" + age + "歳です")
✅ 修正したコード
OK
age = 20
print("私は" + str(age) + "歳です")
# f文字列ならさらに簡単
print(f"私は{age}歳です")
▶ 修正済みコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で動作を確認できます。
解決のポイント
数値を文字列と連結するときはstr()で文字列に変換します。もっと読みやすいのはf文字列で、f"私は{age}歳です"と書けば型変換を意識せずに埋め込めます。
メッセージ別の早見表
can only concatenate str (not "int") to str | 文字列 + 整数 |
can only concatenate str (not "float") to str | 文字列 + 小数 |
unsupported operand type(s) for +: 'int' and 'str' | 数値 + 文字列(逆順) |
can only concatenate list (not "str") to list | リスト + 文字列 |
input()から受け取った値で起きるケース
input()の戻り値は常にstr型です。数値のつもりで直接+すると、同じTypeErrorになります。
NG
age = input("年齢を入力: ") # "20" のようなstr型
print("来年は" + (age + 1) + "歳") # TypeError
OK
age = int(input("年齢を入力: ")) # 先にintへ変換
print("来年は" + str(age + 1) + "歳")
逆順「数値 + 文字列」のケース
文字列を先に書くか数値を先に書くかで、メッセージの型名の順番が変わります。原因と対処は同じです。
TypeError: unsupported operand type(s) for +: 'int' and 'str'
NG
count = 3
print(count + "個")
OK
count = 3
print(str(count) + "個")
リストに文字列を足すケース
リスト同士の+は連結できますが、リストに文字列を直接足すと専用のエラーになります。
TypeError: can only concatenate list (not "str") to list
NG
nums = [1, 2, 3]
result = nums + "4" # TypeError
OK
nums = [1, 2, 3]
nums.append(4) # 1件追加するなら
result = nums + [4] # リスト同士で連結するなら
よくある質問
「can only concatenate str」と「unsupported operand type(s) for +」の違いは?
連結する順番の違いです。「文字列 + 数値」の順だとcan only concatenate str (not "int") to str、「数値 + 文字列」の順だとunsupported operand type(s) for +: 'int' and 'str'になります。原因も対処も同じで、数値側をstr()で変換します。
input()を使うとなぜこのエラーが出やすい?
input()の戻り値は常にstr型だからです。数値のつもりでも文字列のままなので、他の数値と+で連結しようとするとTypeErrorになります。計算に使うならint(input())やfloat(input())で先に変換してください。
リストで出る「can only concatenate list」とは?
リストに文字列を+で直接足そうとしたときのエラーです(can only concatenate list (not "str") to list)。リスト同士の+はOKなので、足す値もlist("4")のようにリスト化するか、appendを使います。
逆に文字列を数値にしたいときは?
int("20") や float("3.14") を使います。数字以外が含まれるとValueErrorになります。
f文字列とstr()どちらがいい?
可読性が高いf文字列が推奨です。Python3.6以降で使えます。
+=(累算代入)でも同じエラーになる?
なります。x += age は x = x + age と同じ意味なので、xが文字列でageが数値なら同じTypeErrorが出ます。x += str(age)にすれば解決します。
なぜJavaScriptでは同じことをしてもエラーにならないの?
JavaScriptの+は片方が文字列なら自動で他方も文字列に変換します(暗黙の型変換)。Pythonは暗黙変換をしない設計のため、str()での明示的な変換が必要です。