Python学習チャンネル by PyQ

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

文字列と数値の結合時のエラー「TypeError: must be str, not int」とは?

f:id:konie_ko:20190514112700p:plain こんにちは、kamekoです。

文字列と数値を結合する際に発生するエラー「TypeError: must be str, not int」を解説します。

質問

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

回答

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

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

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

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

そのため、 + 記号を利用し、文字列と数値を結合する場合は、数値の方を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.