Pythonの型不一致エラー「can only concatenate〜」の対処方法についてまとめた記事です。
「can only concatenate」が発生するケースと対処方法について説明します。

「can only concatenate」(型不一致)とは?

「can only concatenate〜」は型不一致の場合に起きるエラーです。

プログラミングでは計算をする場合、計算に使う全ての値の型を揃える必要がありますが、一つでも違う型の値がある場合は「can only concatenate〜」となります。

型の使い方を理解していない初心者の頃はよく見るエラーです。
ちなみにイージーミスの多い私の場合は最近でもちょくちょく見ます(笑)。

「can only concatenate〜」が起きるのは以下のような場合です。

◆プログラム概要
現在時刻を以下のフォーマットで表示したい。

日時:〇〇

※”日時:”は文字列。〇〇には現在時刻が入ります。

◆実行結果

上記例では、文字列とdatetime型の変数を加算しようとしたため型不一致のためエラーとなっています。

「can only concatenate」の対処方法

「can only concatenate〜」の対処方法は以下の通り。
・型を揃える
・キャストする

型を揃える

基本的に計算をする場合は型を揃えておくのがベストです。
キャストすると意図しない計算結果になる可能性が高くなります。

実装例は以下の通り。
now_strに文字列に変換した時刻を取得します。

◆実行結果

キャストする

キャストとは強制的に型を書き換える方法です。
例えば文字列型にキャストしたい場合は以下のように記述します。

その他整数型に書き換えるint()などがあります。

強引に型を書き換える方法なので意図しない動きになるケースも多いです。
テストをしっかりと行ってエラーが起きないように注意しましょう。

時刻と文字列

時刻を文字列に寄せる場合の実装例は以下の通り。

◆実行結果

キャストと計算/h4>
キャストによって数字の計算をしたい場合はint型に寄せる必要があります。

◆文字列に寄せる場合

◆実行結果
’12’

◆整数に寄せる場合

◆実行結果
3

上記のように文字列(str型)に寄せると計算せずにそのままくっつき、整数(int型)に寄せると計算ができます。

ちなみに時刻型の計算をしたい場合は、timedeltaを使用します。

◆実行結果
2019-11-22 18:19:16.183098

datetime型の使い方については公式ドキュメントも熟読してください。

Pythonまとめ>>Pythonプログラミングの始め方まとめ