【Python】TypeError: unsupported operand type(s) for +: 'int' and 'str' の原因と解決策
最終更新日: 2026-08-26
30秒でわかる原因と解決策
原因: Pythonでは、数値型(
int)と文字列型(str)といった異なるデータ型同士を+演算子で直接計算・連結することはできません。Pythonは「強い型付け」の言語であるため、自動的に型を変換してくれない仕様になっています。解決策: どのような処理を行いたいかに応じて、明示的に型を変換(キャスト)します。
- 数値として足し算したい場合: 文字列を
int()で数値に変換します。- 文字列として結合したい場合: 数値を
str()で文字列に変換するか、f-string(フォーマット済み文字列リテラル)を使用します。
修正コード(Before / After)
❌ エラーが発生するコード
a = 5 # 数値型 (int)
b = '10' # 文字列型 (str)
# int と str を直接足し算しようとするため、TypeError が発生します
c = a + b
print(c)
⭕ 修正後の推奨コード
パターン1:数値として足し算(計算)したい場合
文字列 b を int() を使って数値に変換してから計算します。
a = 5
b = '10'
# '10' を数値の 10 に変換して足し算 (5 + 10 = 15)
c = a + int(b)
print(c) # 出力: 15
パターン2:文字列として連結(結合)したい場合
数値 a を str() を使って文字列に変換してから連結するか、f-stringを使用します。
a = 5
b = '10'
# 5 を文字列の '5' に変換して連結 ('5' + '10' = '510')
c1 = str(a) + b
print(c1) # 出力: 510
# 推奨:f-string(フォーマット文字列)を使うとスッキリ書けます
c2 = f"{a}{b}"
print(c2) # 出力: 510
よくある発生パターンと解説
1. input() 関数で受け取った値と計算しようとした場合
Pythonの input() 関数は、ユーザーが数値を入力したとしても常に文字列(str)として値を取得します。
# ユーザーが「20」と入力したとする
age_input = input("年齢を入力してください: ") # '20' (str)
# 文字列型と数値型を足そうとするためエラー
next_year_age = age_input + 1 # ❌ TypeError
対策: int(input(...)) のように、入力を受け取った時点で数値に変換します。
age_input = int(input("年齢を入力してください: "))
next_year_age = age_input + 1 # ⭕ 正常に計算できる
2. 外部データ(CSV、JSON、API)のパース時
CSVファイルやWeb APIから取得したデータは、数値であっても文字列型としてプログラム内に読み込まれることが多々あります。これらをそのまま数値計算しようとすると、同様のエラーが発生します。
よくある質問 (FAQ)
Q1. 小数(float)と文字列(str)の足し算でも同じエラーになりますか?
はい、同様に TypeError: unsupported operand type(s) for +: 'float' and 'str' が発生します。
少数の場合は、float() 関数を使って変換してください。
x = 1.5
y = '2.5'
result = x + float(y) # 4.0
Q2. int と float(整数と小数)の足し算はエラーになりますか?
いいえ、エラーにはなりません。
Pythonは数値型同士(int と float)の計算であれば、自動的に float に型を合わせて計算を行ってくれます(暗黙の型変換)。
print(5 + 2.0) # 出力: 7.0 (エラーなし)
Q3. 文字列に変換できない値を int() に入れるとどうなりますか?
int('apple') や int('10.5')(小数点を表す文字列)などを実行すると、ValueError が発生します。
あらかじめ数値に変換可能な文字列かどうかを確認するか、例外処理(try-except)を導入してエラーをハンドリングしましょう。