Code Fix

初級

TypeError: can only concatenate str (not "int") to str の原因と直し方

文字列と数値を + で連結しようとしたときに出るエラーです。Pythonの + は両辺の型が揃っていないと使えません。

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

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

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

パターン1

 1  age = 20
 2  print("Age: " + age     )
                        ^
Traceback (most recent call last): File "main.py", line 2, in <module> print("Age: " + age) ~~~~~~~~^~~~~ TypeError: can only concatenate str (not "int") to str

+ による文字列連結は両辺が文字列でなければなりません。数値はstr()で明示的に変換します。

直し方: agestr(age) にします。

この問題を解いてみる →

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

パターン2

 1  count = 5
 2  print("count=" + count      )
                          ^
Traceback (most recent call last): File "main.py", line 2, in <module> print("count=" + count) ~~~~~~~~~^~~~~~~ TypeError: can only concatenate str (not "int") to str

「数字に見えるから文字列」ではありません。countはint型なので、そのままでは文字列と連結できません。

直し方: countstr(count) にします。

この問題を解いてみる →

パターン3

 1  x = 3
 2  y = 4
 3  print("sum=" + x + y          )
                          ^
Traceback (most recent call last): File "main.py", line 3, in <module> print("sum=" + x + y) ~~~~~~~^~~ TypeError: can only concatenate str (not "int") to str

計算結果を文字列と連結する場合も、計算を終えた値をstr()で変換します。

直し方: x + ystr(x + y) にします。

この問題を解いてみる →

よくある誤解

「数字に見えるから文字列と混ぜられる」わけではありません。int型はstr()で明示的に変換しない限り、+ による文字列連結には使えません。

まとめ

TypeError: can only concatenate str (not "int") to strは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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