Hatena::Grouppython

Pythonの覚書

2012-11-18

Pythonも文字列と数値を+演算子で連結しようとするとエラーが発生。TypeError: cannot concatenate 'str' and 'int' objects

| 16:08 | Pythonも文字列と数値を+演算子で連結しようとするとエラーが発生。TypeError: cannot concatenate 'str' and 'int' objects - Pythonの覚書 を含むブックマーク はてなブックマーク - Pythonも文字列と数値を+演算子で連結しようとするとエラーが発生。TypeError: cannot concatenate 'str' and 'int' objects - Pythonの覚書 Pythonも文字列と数値を+演算子で連結しようとするとエラーが発生。TypeError: cannot concatenate 'str' and 'int' objects - Pythonの覚書 のブックマークコメント

HTMLの勉強をしようと、いろいろとタグ付けしてみて動作を見ようとしていてPythonに書かせていたときにつまづいたところ。

よくやっちまうんだけど、文字列と数値を連結して表示させようとすると怒られる。

Sample Code(サンプルコード)

print'<FORM>'
for size in range(1,21):
        size *= 10
        print '<INPUT type="text" size="' + size + '" name="' + 'textboxid'+ size +'"><br>'
print'</FORM>'

Result(実行結果)

Traceback (most recent call last):
  File "C:/Users/One-shot life/Desktop/html.py", line 3, in <module>
    print '<INPUT type="text" size="' + size + '" name="' + 'textboxid'+ size +'"><br>'
TypeError: cannot concatenate 'str' and 'int' objects

自分が悪いっちゃ悪いんだけど、いまいち釈然としない。

Pythonは、変数使用時、変数の型が自動的に決定される。変数を使用するのに、いちいち宣言をせねばならんのは面倒だ!と思っている私には、Pythonの言語仕様は気に入っている。

>>> digit =10
>>> string ='10'
>>> digit + string

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    digit + string
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 
>>> digit
10
>>> string
'10'

とこうなるわけですよね?この例で言うと、変数digitとstringの型は自動的に決定されている。じゃぁ、+演算子使ったときにも自動的に決定してくれないか?と私は思うわけです。もちろん、いつでも勝手にやってくれと思うわけではなく、明らかに文字列だとわかる場合は文字列として扱ってくれよというレベル。printの引数なんだから、表示したいっていうのはこちらからすれば明確。Pythonからすれば不明確と言われてしまえばそれまでだけど・・・。

数値と文字列をプログラマが区別しないと、勝手に動作して暴走して困るというシーンは無いわけではないけれども、もうちょっと融通利かないもんかなと思う。

数値を明示的に文字列にキャストすれば問題ないのだけれども・・・。

Sample Code(サンプルコード)

for size in range(1,21):
        size *= 10
        print '<INPUT type="text" size="' + str(size) + '" name="' + 'textboxid'+ str(size) +'><br>'

Result(実行結果)

nt