🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

PythonのTypeErrorを撃退!「型が違います」エラーのやさしい倒し方

こんにちは!この記事を書いている僕は、ほんの数ヶ月前までプログラミングの「プ」の字も知らない、完全な初心者でした。そんな僕がAIの力を借りながら、今では2つのWebサイトを運営しています。

プログラミング学習中、誰もが一度は遭遇するであろう、あの赤文字のエラーメッセージ。特に「TypeError」は、最初のうちは本当に意味が分からなくて、心が折れそうになりますよね。僕もそうでした。

でも、安心してください。この記事では、僕が実際につまづいた経験をもとに、「TypeErrorとは何か?」そして「どうすれば解決できるのか?」を、専門用語をできるだけ使わずに、世界一やさしく解説します。この記事を読み終える頃には、あなたはTypeErrorを恐れるどころか、解決へのヒントをくれる「味方」だと思えるようになっているはずです!


そもそも「TypeError」って、なに?🤔

さっそくですが、クイズです。次の計算はできるでしょうか?

「数字の 10」 + 「文字の "円"」

直感的に「10円」ってなりそうですよね。では、これはどうでしょう?

「数字の 10」 + 「文字の "りんご"」

...これは計算できませんよね。「10りんご」?意味が分かりません。

実は、Pythonもこれと全く同じことで悩んでいます。Pythonにとって、数字(専門用語で `int` や `float`)文字(専門用語で `str`)は、全くの別人です。人間が「数字の10」と「文字の"りんご"」を足せないのと同じように、Pythonも種類の違うデータを混ぜて計算しようとすると、「どの種類(型)で計算すればいいか分からないよ!」とパニックを起こしてしまいます。

この「型の違いによるパニック」こそが、`TypeError`の正体です。エラーメッセージは、「ご主人様!計算しようとしているデータの型(Type)が違うので、エラー(Error)です!」と私たちに教えてくれている、親切なサインなんです。


【実践】よくあるTypeErrorを体験して、倒してみよう!

理屈はなんとなく分かったところで、さっそく実際のコードで`TypeError`を体験し、それを解決するプロセスを見ていきましょう。このステップバイステップを真似するだけで、あなたもエラー解決のコツが掴めます。

ケース1:数字と文字を「+」で繋ごうとした場合

まずは、一番よくあるパターンです。年齢を表す文章を作ろうとして、次のようなコードを書いたとします。

❌ エラーが起こるコード

このコードをコピーして実行すると、`TypeError`が発生します。

age = 30
print("私の年齢は" + age + "歳です。")
# 実行結果:
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: can only concatenate str (not "int") to str


出ましたね、`TypeError`。エラーメッセージの最後を見てみましょう。
TypeError: can only concatenate str (not "int") to str
これは、「`str`(文字)には`str`(文字)しか連結(concatenate)できませんよ!(`int`(数字)じゃなくてね)」という意味です。Python君が「"私の年齢は" という文字と、数字の `30` は直接足せません!」と教えてくれているわけです。


🕵️‍♂️ 原因調査:本当に型が違うのか確認しよう

エラーの原因が「型の違い」だと分かりました。では、本当にそうなのか、Pythonに直接聞いて確かめてみましょう。変数の型を調べるには、`type()`という便利な関数を使います。

text = "私の年齢は"
age = 30

print( type(text) )
print( type(age) )

# 実行結果:
# <class 'str'>
# <class 'int'>


ご覧の通り、`text`は文字である`str`、`age`は数字である`int`だと分かりました。これで、型が違うことが確定しましたね。


✅ 解決策①:数値を文字列に変身させる `str()`

原因が分かれば、あとは簡単です。数字である`age`を、文字に変身させてあげればいいのです。そのための魔法が `str()` 関数です。変数を`str()`で囲むだけで、どんな型でも文字列に変換できます。

age = 30
# str()を使って、数値のageを文字列に変換!
print("私の年齢は" + str(age) + "歳です。")

# 実行結果:
# 私の年齢は30歳です。


やりました!エラーが出ずに、正しく表示されましたね。これが`TypeError`の基本的な倒し方です。


✅ 解決策②(推奨):f-stringでスマートに解決!

`str()`でも解決できますが、もっとモダンで読みやすい方法があります。それが「f-string」です。

文字列の最初のクォーテーションの前に `f` を付け、変数名を `{}` で囲むだけ。これだけで、Pythonが自動的に変数をいい感じに文字に変換して埋め込んでくれます。`+` で繋ぐ必要も、`str()` で変換する必要もありません。

age = 30
# f-stringを使うと、こんなにスッキリ!
print(f"私の年齢は{age}歳です。")

# 実行結果:
# 私の年齢は30歳です。


どうですか?こちらのほうがコードが短く、直感的で分かりやすいですよね。これから文字列と変数を組み合わせるときは、f-stringを使うことを強くおすすめします!


ケース2:ユーザー入力の罠 `input()`

Webサイトやアプリでは、ユーザーに何かを入力してもらう場面がたくさんあります。Pythonでユーザーからの入力を受け取るには`input()`関数を使いますが、ここには大きな落とし穴があります。

❌ エラーが起こるコード

ユーザーに生まれた年を入力してもらい、現在の年齢(2025年時点)を計算するコードを書いてみましょう。

birth_year = input("あなたが生まれた年を西暦で入力してください: ")
age = 2025 - birth_year
print(f"あなたの年齢は{age}歳ですね!")

# 実行(例えば 1995 と入力):
# あなたが生まれた年を西暦で入力してください: 1995
#
# 実行結果:
# Traceback (most recent call last):
#   File "<stdin>", line 2, in <module>
# TypeError: unsupported operand type(s) for -: 'int' and 'str'


またしても`TypeError`です。今度のメッセージはunsupported operand type(s) for -: 'int' and 'str'。「`-`(引き算)の計算では、`int`(数字)と`str`(文字)の組み合わせはサポートしていませんよ」と言っています。

「え? 1995って入力したのに、なんで文字なの?」と思いますよね。ここが重要です。

`input()`関数で受け取った値は、たとえ数字のように見えても、すべて文字列 (`str`) として扱われます。

これはPythonの絶対的なルールなので、覚えてしまいましょう。`type()`で確認すれば一目瞭然です。

birth_year = input("あなたが生まれた年を西暦で入力してください: ")
print(f"入力されたデータの型は: {type(birth_year)} です。")

# 実行(例えば 1995 と入力):
# あなたが生まれた年を西暦で入力してください: 1995
#
# 実行結果:
# 入力されたデータの型は: <class 'str'> です。

✅ 解決策:文字列を数値に変身させる `int()`

原因は、`input()`のせいで`birth_year`が文字列 (`str`) になってしまっていることでした。計算するためには、これを数値 (`int`) に変身させる必要があります。

そこで使うのが `int()` 関数です。`str()`の逆ですね。`input()`で受け取った値をまるごと`int()`で囲んであげましょう。

# input()の結果を、すぐにint()で数値に変換!
birth_year_str = input("あなたが生まれた年を西暦で入力してください: ")
birth_year_int = int(birth_year_str)

age = 2025 - birth_year_int
print(f"あなたの年齢は、およそ{age}歳ですね!")

# 実行(例えば 1995 と入力):
# あなたが生まれた年を西暦で入力してください: 1995
#
# 実行結果:
# あなたの年齢は、およそ30歳ですね!


見事に計算できました! `input()` を使ったら、計算の前に `int()` で変換する。このセットを覚えておけば、もう怖くありません。


【AI時代の学習法】TypeErrorはAIに聞いちゃおう!

僕がプログラミング初心者を短期間で抜け出せたのは、AIを相棒にしたからでした。エラーメッセージが出ても、焦る必要はありません。今は、優秀なAIアシスタントがいつでも隣にいてくれます。

エラーが出たら、「エラーが出たコード」「表示されたエラーメッセージ全文」をコピーして、次のようにAIに質問してみてください。

【魔法のプロンプト(質問文)】

Pythonで以下のコードを実行したところ、次のエラーが出ました。
このエラーの原因と解決策を、プログラミング初心者にも分かりやすく、具体例を交えて教えてください。

▼コード
```python # ここにエラーが出たあなたのコードを貼り付ける age = 30 print("私の年齢は" + age + "歳です。") ```

▼エラーメッセージ
``` # ここに表示されたエラーメッセージを全文貼り付ける Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str ```


このように質問すれば、AIは「なぜエラーが起きたのか」「どうすれば直るのか」を、この記事で解説したように丁寧に教えてくれるはずです。エラーを解決のチャンスに変える、最高の学習ツールとしてAIをどんどん活用しましょう!


まとめ:TypeErrorは友達🤝

今回は、多くの初心者がつまずく`TypeError`について、その正体と倒し方を解説しました。最後に、大事なポイントをおさらいしましょう。

エラーは、あなたのコードの間違いを教えてくれる親切なヒントです。`TypeError`が出たら、「OK、型の確認タイムだな」と思えるようになれば、あなたはもう初心者卒業です。これからもたくさんのエラーに出会うと思いますが、一つ一つ解決していくことで、確実にレベルアップできます。応援しています!

次のステップへ

`TypeError`をマスターしたあなたへ。次は、ファイルの読み書きなどでよく遭遇する、もう一つの厄介なエラー「文字化け」に挑戦してみませんか?原因が分かれば、これも怖くありません。

次の記事へ: UnicodeDecodeErrorが出るときの対処方法(文字化け)»