Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

文字列と数値の結合時のエラー「TypeError: can only concatenate str (not "int") to str」とは?

f:id:Nutty55:20211104133626p:plain

こんにちはPyQサポートです。

今回は、文字列と数値を結合する際に発生するエラーTypeError: can only concatenate str (not "int") to strを解説します。

Python3.10.0先取り記事で紹介しましたようにPython3.10から、構文エラーの表現が改善されました。本記事は、文字列と数値の結合時のエラー「TypeError: must be str, not int」とは?の内容をPython3.10バージョンで再構築しています。

質問:文字列と数値を結合する場合に発生するエラーの対処法を知りたい

年齢や身長、体重は数値型のため表示する際には文字型への変換は不要と認識しておりました。 なぜprint()関数で結果を表示する際にstr関数を使用して文字型に変換しないと表示できないのでしょうか。

回答:TypeError: can only concatenate str (not "int") to strを解決するには文字列と数値の結合時にstr関数を利用します。

print(1) と、数値をprint関数で表示する際、型の変更は不要です。

しかし、 + 記号を利用し、文字列と結合する場合は異なる型同士での結合ができません。

以下のような場合はエラーになります。

>>> 'hello' + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

TypeError: can only concatenate str (not "int") to strは、「str型には(int型ではなく)str型のみ連結できます」という意味です。 そのため、 + 記号を利用し、文字列と数値を結合する場合は数値をstr関数を利用して文字列型に変換します。

>>> 'hello' + str(2)
'hello2'

その他の書き方

print関数で、文字列と数値など型が違うものを混ぜて表示したい場合は、カンマで繋ぎます。スペースが間に入りますが、そのまま表示できます。

>>> print('hello', 1, 2, 'world')
hello 1 2 world

また、print関数の最後に sep='' と書くとカンマで繋いでもスペースが間に入りません。

>>> print('hello', 1, 2, 'world', sep='')
hello12world

sep にはカンマ区切りで指定した値をつなぐ文字を指定できます。以下は @ で繋いだ例です。

>>> print('hello', 1, 2, 'world', sep='@')
hello@1@2@world

公式ドキュメント:print

https://docs.python.org/ja/3/library/functions.html#print

フォーマット済み文字列リテラル

Python3.6からは、フォーマット済み文字列リテラル(f-string)を利用した書き方もできるようになりました。

>>> print(f'hello{1}{2}world')
hello12world

公式ドキュメント:フォーマット済み文字列リテラル

https://docs.python.org/ja/3/reference/lexical_analysis.html#formatted-string-literals

Copyright ©2017- BeProud Inc. All rights reserved.