Python で 1=="1" → false

Pythonで文字列と数値を比較すると false になる。例えば、こんな感じ:
>>> a = '1'
>>> a == 1
False
使用する変数の型を把握しているプログラムの場合は、問題にならないが、変数の型が不定な場合は、厄介なバグになる。
SQLの結果セットのように変数の型が変更される可能性のある場合は必ず型をチェックすべきと思われる。
こんな感じか?
>>> a = '1'
>>> ( (type(a) is str) and a == '1' ) or a ==1
True
ちなみに、a = 1.0 だと float になるので、あえて型チェックをしていない
a+0 == 1として数値型以外は例外にするほうがいいかもしれない
>>> a = 1
>>> a + 0 == 1
True
>>> a= '1'
>>> a + 0 == 1
Traceback (most recent call last):
File "", line 1, in
a + 0 == 1
TypeError: can only concatenate str (not "int") to str
>>>

-- 広告
Pythonチュートリアル 第4版 - Guido van Rossum, 鴨澤 眞夫
Pythonチュートリアル 第4版 - Guido van Rossum, 鴨澤 眞夫

この記事へのコメント

この記事へのトラックバック