我的代码中有一个非常奇怪的错误...在某些时候我必须将值转换为unicode字符串,但需要特殊处理的一些特殊值(None,True,False)除外。
代码看起来像这样:
conversions = {
None: 'null',
True: 'true',
False: 'false',
}
def translate(val):
return conversions.get(val, unicode(val))
但是当传入值1
时,我在期待u'true'
的时候回到u'1'
。所以我打开了一个控制台,玩了一下:
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = {True: 'yeah', False: 'boooh'}
>>> d[1]
'yeah'
>>> d[0]
'boooh'
>>> 1 in d
True
>>> 0 in d
True
>>> True is 1
False
因此,事实证明0
和1
的行为方式与True
和False
相同。为什么?这是令人困惑的,并导致像这样的奇怪的错误......