TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ の原因と解決方法

Pythonを使っていると、次のようなエラーに遭遇することがあります。
TypeError: unsupported operand type(s) for +: 'int' and 'str'
このエラーは、整数(int)と文字列(str)を「+」で足し算しようとしたときに発生します。
たとえば、次のコードです。
age = 20
text = "歳"
print(age + text)
実行すると、
TypeError: unsupported operand type(s) for +: 'int' and 'str'
と表示されます。
この記事では、TypeError: unsupported operand type(s) for +: 'int' and 'str' の意味、原因、具体的な解決方法、intとstrを正しく扱う方法について初心者向けに解説します。
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ とは?
TypeError: unsupported operand type(s) for +: 'int' and 'str' は、異なるデータ型を「+」演算子で処理しようとしたときに発生するTypeErrorです。
エラーメッセージを分解すると理解しやすくなります。
TypeError: unsupported operand type(s) for +: 'int' and 'str'
それぞれの意味は次のとおりです。
| 表示 | 意味 |
|---|---|
TypeError |
データ型が適切ではない |
unsupported operand type(s) |
そのデータ型の組み合わせは演算できない |
+ |
+演算子で処理しようとしている |
int |
整数型 |
str |
文字列型 |
つまり、
int型とstr型は、そのまま「+」で計算できません
という意味です。
なぜintとstrを「+」できないのか?
Pythonでは、整数と文字列はまったく異なるデータ型です。
number = 10
text = "20"
この場合、
print(type(number))
の結果は、
<class 'int'>
となります。
一方、
print(type(text))
は、
<class 'str'>
です。
そのため、
number + text
とすると、Pythonは
10 + "20"
を計算することになります。
しかし、10は数値であり、"20"は文字列です。
Pythonは、この2つを自動的に数値へ変換してくれないため、TypeErrorが発生します。
TypeErrorが発生する具体例
例1:整数と文字列を足している
もっとも基本的な例です。
number = 10
text = "20"
result = number + text
このコードでは、
int + str
という処理を行っています。
そのため、
TypeError: unsupported operand type(s) for +: 'int' and 'str'
となります。
例2:年齢と文字列を連結する
次のコードもエラーになります。
age = 30
print("年齢は" + age + "歳です")
"年齢は"はstr、ageはintです。
そのため、
str + int
となり、TypeErrorが発生します。
解決方法1:str()で文字列に変換する
文字列として連結したい場合は、str()を使います。
age = 30
print("年齢は" + str(age) + "歳です")
実行結果:
年齢は30歳です
str()を使うことで、
str(age)
は、
"30"
という文字列になります。
結果として、
"年齢は" + "30" + "歳です"
となるため、正常に処理できます。
解決方法2:f文字列を使う
Pythonでは、文字列に変数を埋め込む場合、**f文字列(f-string)**を使う方法がおすすめです。
age = 30
print(f"年齢は{age}歳です")
実行結果:
年齢は30歳です
f文字列では、int型の変数をそのまま埋め込めます。
f"年齢は{age}歳です"
のように記述するだけなので、str()を毎回書く必要がありません。
解決方法3:format()を使う
format()を使って文字列を作ることもできます。
age = 30
print("年齢は{}歳です".format(age))
実行結果:
年齢は30歳です
複数の変数も扱えます。
name = "田中"
age = 30
print("{}さんは{}歳です".format(name, age))
実行結果:
田中さんは30歳です
ただし、現在のPythonでは、シンプルな文字列埋め込みならf文字列が使いやすいでしょう。
解決方法4:int()で文字列を整数に変換する
逆に、文字列を数値として計算したいケースもあります。
たとえば、
number1 = "10"
number2 = 20
print(number1 + number2)
とすると、
TypeError: unsupported operand type(s) for +: 'str' and 'int'
になります。
この場合、number1を整数に変換します。
number1 = "10"
number2 = 20
print(int(number1) + number2)
実行結果:
30
int()によって、
"10"
が、
10
に変換されます。
つまり、
str + int
ではなく、
int + int
として計算できます。
int()とstr()の使い分け
TypeError: unsupported operand type(s) for +: 'int' and 'str'を解決するときは、最終的に何をしたいのかを考えることが重要です。
| やりたいこと | 使用する関数 |
|---|---|
| 数値として計算したい | int() |
| 文字列として連結したい | str() |
| 文字列に変数を埋め込みたい | f文字列 |
たとえば、数値を計算するなら、
price = "100"
tax = 10
total = int(price) + tax
print(total)
文字列として表示するなら、
price = 100
print("価格:" + str(price) + "円")
f文字列なら、
price = 100
print(f"価格:{price}円")
となります。
input()が原因になるケース
初心者がこのTypeErrorに遭遇する原因として特に多いのが、input()です。
Pythonのinput()は、入力された値を文字列(str)として返します。
たとえば、
age = input("年齢を入力してください:")
print(type(age))
「30」と入力すると、
<class 'str'>
となります。
つまり、
age = input("年齢を入力してください:")
で入力した30は、数値の30ではなく文字列の"30"です。
input()の値を計算する場合
たとえば、
age = input("年齢を入力してください:")
next_age = age + 1
とすると、エラーになります。
なぜなら、
str + int
だからです。
この場合は、int()を使います。
age = int(input("年齢を入力してください:"))
next_age = age + 1
print(next_age)
30と入力すると、
31
と表示されます。
「10 + 20」と「”10″ + “20”」は違う
Pythonでは、見た目が数字でもデータ型が違えば意味が変わります。
print(10 + 20)
結果:
30
これは整数同士の足し算です。
一方、
print("10" + "20")
結果:
1020
こちらは文字列同士の連結です。
つまり、
10 + 20
は数値計算、
"10" + "20"
は文字列連結です。
この違いは、Pythonを学ぶうえで非常に重要です。
Pythonの「+」は足し算だけではない
+演算子は、数値に対して使うと足し算になります。
10 + 20
結果:
30
しかし、文字列に対して使うと、文字列の連結になります。
"Python" + "入門"
結果:
Python入門
一方で、
10 + "20"
のように、異なる型を組み合わせるとTypeErrorになります。
エラーが出たらtype()で確認する
TypeErrorの原因が分からない場合は、type()を使うと便利です。
number = 10
text = "20"
print(type(number))
print(type(text))
実行結果:
<class 'int'>
<class 'str'>
このように、変数のデータ型を確認できます。
エラーが発生したら、
print(type(変数))
を入れてみると、原因を特定しやすくなります。
よくある間違い
数字を引用符で囲んでいる
次のコードを見てみましょう。
price = "100"
このpriceは数値ではありません。
type(price)
は、
<class 'str'>
になります。
数値として扱いたいなら、
price = 100
とします。
または、
price = int("100")
と変換します。
変数の型を意識することが重要
Pythonでは、変数を使うときに「この値は何型なのか」を意識することが重要です。
たとえば、
price = 100
ならintです。
price = "100"
ならstrです。
見た目は似ていますが、Pythonではまったく別の値として扱われます。
| コード | データ型 | 用途 |
|---|---|---|
100 |
int |
数値 |
"100" |
str |
文字列 |
100.5 |
float |
小数 |
True |
bool |
真偽値 |
TypeErrorを防ぐためのポイント
TypeError: unsupported operand type(s) for +: 'int' and 'str'を防ぐには、次のポイントを意識しましょう。
1. 変数の型を確認する
print(type(value))
でデータ型を確認できます。
2. input()の戻り値に注意する
value = input()
は文字列として取得されます。
数値として利用するなら、
value = int(input())
とします。
3. 文字列と数値を連結するときは変換する
print("合計:" + str(total))
または、
print(f"合計:{total}")
とします。
4. 目的に合わせて型変換する
計算するなら、
int()
文字列として扱うなら、
str()
を使います。
TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’ まとめ
TypeError: unsupported operand type(s) for +: 'int' and 'str'は、int型とstr型を+演算子で処理しようとしたときに発生するエラーです。
たとえば、
number = 10
text = "20"
print(number + text)
ではエラーになります。
文字列として連結したい場合は、
print(str(number) + text)
とします。
数値として計算したい場合は、
print(number + int(text))
とします。
また、文字列に数値を表示するだけなら、
print(f"数値は{number}です")
のようにf文字列を使う方法がおすすめです。
特にPython初心者は、input()で取得した値が文字列になることを覚えておくと、このエラーを大幅に減らせます。
「計算したいのか」「文字列として表示したいのか」を考えて、int()、str()、f文字列を使い分けることがポイントです。




