- Python
can only concatenate strの直し方|Python
TypeError: can only concatenate str (not "int") to str は、文字列(str)に、+ で数値(int)をつなごうとしたときのエラーです。 「str には str しかつなげません(int が来ました)」という意味です。
"合計: " + 100 # ← str + int
直し方は、数値を文字列にしてからつなぐか、f-string で書くかです。
| 直し方 | 書き方 | 結果 |
|---|---|---|
| ① f-string(おすすめ) | f"合計: {100}円" |
合計: 100円 |
② str() で変換 |
"合計: " + str(100) + "円" |
合計: 100円 |
③ format |
"合計: {}円".format(100) |
合計: 100円 |
(表示だけなら)print に並べる |
print("合計:", 100, "円") |
合計: 100 円(間にスペース) |
逆に、数値として計算したいのに、片方が文字列だった(input() の値など)なら、int() で数値に変換します。
確認環境:Python 3.10・3.14 で、エラー文と結果を確かめました。2つの版でエラー文は同じでした(確認日 2026年10月11日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「can only concatenate strの直し方|Python」
エラー文の (not "○○") で、何をつないだか分かる
| 書いたコード | エラー文 |
|---|---|
"合計: " + 100 |
can only concatenate str (not "int") to str |
"税率" + 0.1 |
can only concatenate str (not "float") to str |
"a" + None |
can only concatenate str (not "NoneType") to str |
"a" + [1] |
can only concatenate str (not "list") to str |
"a" + b"b" |
can only concatenate str (not "bytes") to str |
not "NoneType" は、つなごうとした変数が None だったということです。関数の戻り値や dict.get() の結果が None になっていないかを確かめます。not "bytes" は、ファイルや通信から読んだデータを .decode("utf-8") で文字列にしていない形です。
逆向き(数値 + 文字列)はエラー文が違う
| 書いたコード | エラー文 |
|---|---|
"合計: " + 100(str が左) |
can only concatenate str (not "int") to str |
100 + "円"(int が左) |
unsupported operand type(s) for +: 'int' and 'str' |
"5" - 3 |
unsupported operand type(s) for -: 'str' and 'int' |
[1] + "a"(list が左) |
can only concatenate list (not "str") to list |
どちらも原因は同じ「型が違うものを + でつないだ」です。左側の型によって、エラー文が変わります。
直し方① f-string(おすすめ)
price = 1200
tax = 0.1
print(f"{price:,}円 税込{price * (1 + tax):,.0f}円")
# 1,200円 税込1,320円
f-string は、{} の中に変数や計算を書くと、自動で文字列にして埋め込みます。 :, で3桁区切り、:.0f で小数を丸めるなど、表示の形も指定できます。書式の一覧は、既存の記事「Python f-string書式指定|全項目の早見表と実行結果・3.14対応」で扱っています。
直し方② str() で変換する
count = 3
msg = "件数" + str(count) # '件数3'
join でも同じエラーの仲間が出る
",".join([1, 2])
# TypeError: sequence item 0: expected str instance, int found
",".join(map(str, [1, 2])) # '1,2'
リストを join でつなぐときも、要素が数値だとエラーになります。 map(str, リスト) で、要素をすべて文字列にしてからつなぎます。
input() の値は、いつも文字列
a = input("1つ目: ") # 5 と入力
b = input("2つ目: ") # 3 と入力
print(type(a), a + b)
print(a + 1)
<class 'str'> 53
TypeError: can only concatenate str (not "int") to str
input() の値は、数字を入力しても文字列(str)です。 a + b は計算されず、"5" と "3" がつながって 53 になりました。a + 1 ではエラーになります。
a = int(input("1つ目: "))
b = int(input("2つ目: "))
print(a + b) # 8
エラーにならずに 53 になるほうが、気づきにくい間違いです。CSV やフォームから読み込んだ値も、文字列のまま入っていることがあります。
int() で変換できない文字列
| 変換したい文字列 | int() の結果 |
|---|---|
"12" |
12 |
" 12 "(前後にスペース) |
12(変換できた) |
"12"(全角の数字) |
12(変換できた) |
"1,200"(カンマ付き) |
ValueError |
"3.5"(小数) |
ValueError。float("3.5") なら 3.5 |
カンマ付きの金額は int(s.replace(",", "")) のように、カンマを取ってから変換します。 型の変換の一覧は、既存の記事「Python型変換まとめ|int・str・floatとValueError対処」で扱っています。
型を確かめる方法
x = input()
print(type(x)) # <class 'str'>
print(repr(x)) # '5' ← 引用符が付いていれば文字列
print(x) だけでは、5 と '5' の区別がつきません。 type() か repr() で確かめると、文字列かどうかが分かります。
文字列の掛け算はエラーにならない
| 書いたコード | 結果 |
|---|---|
"5" * 3 |
'555'(エラーにならない) |
"5" + "3" |
'53'(エラーにならない) |
"5" - 3 |
TypeError |
* と + は、文字列どうしでも動くので、数値のつもりで計算すると、エラーにならずに違う結果になります。 計算結果がおかしいときは、type() で文字列が混ざっていないかを確かめます。
確認の手順(チェックリスト)
| 順番 | 確認すること | 直し方 |
|---|---|---|
| 1 | 文字列を作りたいのか、計算したいのか | 文字列 → f-string、計算 → int() |
| 2 | エラー文の not "○○" は何か |
NoneType なら None になった原因を探す |
| 3 | input()・CSV・フォームの値か |
int()・float() で変換 |
| 4 | カンマ・小数を含むか | replace(",", "")・float() |
| 5 | join のリストに数値があるか |
map(str, リスト) |
よくある質問
Q. print("合計:", 100) と f-string の違いは何ですか。
A. print にカンマで並べると、間にスペースが入ります(合計: 100 円)。sep="" を付けるとスペースが入りません(合計:100円)。画面に表示するだけなら print で並べてもよく、文字列として保存・送信するなら f-string を使います。
Q. None をつないだエラーが出ました。 A. つないだ変数が None になった場所を探します。関連記事の「'NoneType' object has no attributeの直し方」で、None が返る代表的な例を扱っています。
まとめ
- str に、
+で int・float・None などをつないだエラー - 直し方は f-string、
str()、format 100 + "円"のように数値が左だと、unsupported operand type(s)と表示されるinput()の値は文字列。"5" + "3"は53になるint("1,200")・int("3.5")は ValueError
参考・出典
確認日はいずれも 2026年10月11日です。
- Python ドキュメント「Built-in Types」(文字列型 str):https://docs.python.org/3/library/stdtypes.html
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「can only concatenate strの直し方|Python」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。