できない.dev

Python で「TypeError: can only concatenate str (not "int") to str」が直らない

文字列に数値などを + で連結すると出る型エラー。
数値側を str() で文字列化するか、f-string や print のカンマ区切りで組み立てる。

公開: 更新:

症状できない · exit 1
python bad.py
Traceback (most recent call last):
  File "/tmp/tmp.D99yWvMHtU/bad.py", line 2, in <module>
    print("合計: " + count + "件")
TypeError: can only concatenate str (not "int") to str

2026-09-05 に python:3.12(Python 3.12.14 / Git 2.47.3) で実際に打って取った出力。検証環境の詳細

要約

TypeError: can only concatenate str (not "int") to str は、文字列 str に対して + で int などの別の型を連結しようとしたときに出る。

Python の + は「文字列同士」か「数値同士」でしか使えず、"個数: " + 3 のような混在は暗黙変換されない。
数値を str() で文字列化するか、f-string を使えば解決する。

実行例

Python 3.12 で実行すると、失敗するコードはエラー箇所を ~~~^~~~ で指し示して停止する。str() での変換・f 文字列・print のカンマ区切りはいずれもエラーなく通るが、カンマ区切りだけは引数の間に空白が入り「合計: 3 件」と表示される。

$ python bad.py
Traceback (most recent call last):
  File "/tmp/tmp.D99yWvMHtU/bad.py", line 2, in <module>
    print("合計: " + count + "件")
          ~~~~~~~~~^~~~~~~
TypeError: can only concatenate str (not "int") to str
$ echo $?
1
$ python solve_str.py
合計: 3件
$ python solve_fstring.py
合計: 3件
$ python solve_print_comma.py
合計: 3 件

— 2026-09-05 時点の出力

検証環境Python 3.12.14 / Git 2.47.3 / 2026-09-05 検証
検証日
実行環境
python:3.12 Debian GNU/Linux 13 (trixie)
バージョン
  • Python 3.12.14
  • Git 2.47.3

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

解決策

1. str() で明示的に変換する

count = 3
print("合計: " + str(count) + "件")

+ で連結するなら、数値側を str() で文字列にそろえる。
逆に文字列を数値として足したいなら int() で変換する。

2. f-string で埋め込む

count = 3
print(f"合計: {count}件")

最も読みやすい方法。{} の中では型変換が自動で行われるため、str() を書かなくてよい。

3. print のカンマ区切りを使う

count = 3
print("合計:", count, "件")

print に , で渡すと、各値を空白区切りで出力する。
連結ではないので型エラーにならない。

よくある原因

  1. str と int の連結: "合計" + count のように型が混ざっている。
  2. input() の結果: input() は常に文字列を返すため、数値と足すとこのエラーになる。
  3. None やリスト: 関数が None を返し、それを文字列に連結している。

この手順で直った?