PythonのTypeError: can only concatenate str (not “int”) to strの直し方
Pythonで文章の中に金額や点数を入れようとしたとき、TypeError: can only concatenate str (not "int") to str と表示されることがあります。これは文字列と整数を、そのまま + で連結していることが原因です。この記事では、エラーを再現してから、str() とf文字列の2通りで修正します。
結論
文字列と整数をつなげて1つの文章にする場合は、整数を str() で文字列へ変換するか、f文字列を使います。初心者には、型変換の位置が少なく読みやすいf文字列がおすすめです。
price = 500
message = f"料金は{price}円です"
print(message)
発生している問題
商品価格を文章として表示するため、文字列の間へ整数の price を入れたいとします。次のようにすべてを + でつなぐと、2行目で処理が止まります。
修正前コード
price = 500
message = "料金は" + price + "円です"
print(message)
実行すると、最後の行に次のエラーが表示されます。
TypeError: can only concatenate str (not "int") to str
原因
"料金は" と "円です" は文字列を表す str 型ですが、500 は整数を表す int 型です。文字列の + は文字列同士を連結する処理なので、途中に整数が入ると同じ方法では扱えません。エラー文の not "int" は、「ここで連結しようとした値は文字列ではなく整数だった」という手掛かりです。
Python公式ドキュメントでは、str は文字列の組み込みクラスとして説明され、str(object) はオブジェクトの文字列表現を返します。整数として計算したい値を永久に文字列へ変えるのではなく、表示用の文章を作る場所で必要な値だけ変換するのがポイントです。
修正後コード
1つ目は、整数を str() で文字列へ変換してから連結する方法です。
price = 500
message = "料金は" + str(price) + "円です"
print(message)
2つ目は、文字列の先頭に f を付け、波括弧の中へ変数を書く方法です。
price = 500
message = f"料金は{price}円です"
print(message)
どちらも price 自体は整数のままなので、その後に税率計算や合計計算へ使えます。
実行結果
2つの修正後コードは、どちらも次の1行を出力します。
料金は500円です
ローカルのPython 3.12.13と公開中のAI Work Studioで実行し、修正前は同じTypeError、修正後は同じ1行になることを確認しました。
よくある間違い
数字を引用符で囲んでしまう
price = "500" とすれば連結はできますが、price * 2 は数値の1000ではなく文字列の繰り返しになります。価格として計算する値は整数で保持し、表示するときだけ変換します。
printのカンマと連結を混同する
print("料金は", price, "円です") でもエラーは出ませんが、値の間に空白が入ります。この記事と完全に同じ 料金は500円です を作るなら、str() またはf文字列を使います。
str()とint()を逆にする
str() は表示用の文字列へ変換するとき、int() は数字だけの文字列を計算用の整数へ変換するときに使います。何をしたいかで選び分けてください。
AI Work Studioで試す手順
- AI Work Studioを開き、Pythonタブを選びます。
- 修正前コードを貼り付けて「Pythonを実行」を押します。
- Consoleで
TypeError: can only concatenate str (not "int") to strを確認します。 str(price)またはf文字列へ直し、もう一度実行します。- Consoleに
料金は500円ですと表示されれば成功です。
今回は標準入力を使わないため、Standard Input欄は空のままで実行できます。PreviewはHTML/CSS/JavaScript向けなので、Pythonの結果はConsoleで確認します。
まとめ
このTypeErrorは、文字列と整数をそのまま + でつなごうとしたときに発生します。表示用なら str() で変換するか、f文字列へ書き換えます。エラー文に str と int が見えたら、変数の中身だけでなく型の組み合わせを確認しましょう。