Pythonで「'str'オブジェクトと'int'オブジェクトは連結できません」というエラーが出る理由と解決方法
はじめに:このエラーが発生する状況
Pythonで文字列と数値を組み合わせて出力しようとした際、「TypeError: cannot concatenate 'str' and 'int' objects('str'オブジェクトと'int'オブジェクトは連結できません)」というエラーに遭遇することがあります。これは初心者の方が非常につまずきやすいポイントの一つです。
本記事では、このエラーが発生する原因と、具体的な解決方法をわかりやすく解説します。
エラーの原因
Pythonでは、文字列(str型)と整数(int型)という異なる型同士を「+」演算子などで直接連結・結合することはできません。例えば、以下のようなコードを書くとエラーになります。
for num in range(5):
print("%d" % num + 1)一見すると正しく動作しそうですが、実際には「%dでフォーマットされた文字列」と「数値の1」を連結しようとしているため、型の不一致によるTypeErrorが発生します。
解決方法1:演算部分を括弧で囲む
最もシンプルな解決策は、計算したい式全体を括弧で囲むことです。
for num in range(5):
print("%d" % (num + 1))括弧で囲むことで、「num + 1」という計算が先に実行され、その結果(int型の値)が%dに渡されます。%dは、後に続くオブジェクトを整数として文字列に埋め込むためのフォーマット指定子です。
ポイントとして、%d自体は後に続く対象を文字列へ変換(キャスト)する役割を持っています。しかし、括弧がない場合は、すでに文字列化された結果に対して数値を連結しようとするため、エラーになってしまうのです。
解決方法2:str()関数で明示的に変換する
もう一つの方法として、数値をstr()関数で明示的に文字列へ変換してから連結する方法があります。
for num in range(5):
print(str(num + 1))このように書けば、両方が文字列型になるため、問題なく連結できます。
解決方法3:f文字列(f-string)を使う(推奨)
Python 3.6以降では、より読みやすいf文字列を使うのが現代的なベストプラクティスです。
for num in range(5):
print(f"{num + 1}")f文字列なら、波括弧{}の中に直接式を書けるため、括弧やフォーマット指定子を意識する必要がなく、コードの可読性も大きく向上します。
まとめ
「'str'オブジェクトと'int'オブジェクトは連結できません」というエラーは、文字列と数値という異なる型を直接結合しようとしたことが原因です。主な対策は以下の3つです。
- %演算子を使う場合は、計算式を(num + 1)のように括弧で囲む
- str()関数で数値を明示的に文字列へ変換する
- Python 3.6以降なら、f文字列を使うのが最もシンプルでおすすめ
エラーメッセージには必ず型名が表示されるので、「どの型同士の操作で失敗しているのか」を確認する癖をつけると、デバッグが格段に早くなりますよ。
-
【Python】datetimeオブジェクトから月と日だけを抽出して表示する方法
Pythonでdatetimeオブジェクト(日時データ)から「月」と「日」だけを抽出してグラフに表示したい場合、matplotlibが提供するDateFormatter()クラスを利用すると簡単に実現できます。この記事では、実際のコード例とともに具体的な手順をわかりやすく解説します。実装の手順図(figure)のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。2次元のサイズ変更可能な表形式データを持つデータフレームdfを作成します。figureとサブプロットの一式を作成します。plot()メソッドを使ってデータフレームをプロットします。X軸のフォーマッターを設定し、月
-
Pythonの関数名の前後に付く__(ダブルアンダースコア)の意味とは?理由をわかりやすく解説
Pythonのコードを読んでいると、__init__ や __str__ のように、名前の前後にダブルアンダースコア(二重のアンダースコア __)が付いた関数やメソッドを目にすることがあります。これらは「ダンダー(dunder:double underscore の略)メソッド」あるいは「特殊メソッド」「マジックメソッド」と呼ばれるもので、Pythonの言語仕様において特別な意味を持つ名前です。 ダブルアンダースコアはPython側で予約された名前 前後にダブルアンダースコアが付いた名前は、Pythonの組み込み機能(ビルトイン)として実質的に予約されています。これらはクラスの振る舞いをカス