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' の意味、原因、具体的な解決方法、intstrを正しく扱う方法について初心者向けに解説します。


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 + "歳です")

"年齢は"strageintです。

そのため、

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文字列を使い分けることがポイントです。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら