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()で明示的に変換します。
直し方: age を str(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型なので、そのままでは文字列と連結できません。
直し方: count を str(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 + y を str(x + y) にします。
よくある誤解
「数字に見えるから文字列と混ぜられる」わけではありません。int型はstr()で明示的に変換しない限り、+ による文字列連結には使えません。
まとめ
TypeError: can only concatenate str (not "int") to strは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。