我有时收到不存在的键调用一个字典,所以我尝试使用hasattr
和getattr
处理这些情况:Python的hasattr字典的列表值总是返回false?
key_string = 'foo'
print "current info:", info
print hasattr(info, key_string)
print getattr(info, key_string, [])
if hasattr(info, key_string):
array = getattr(info, key_string, [])
array.append(integer)
info[key_string] = array
print "current info:", info
第一次遇到这种运行具有integer = 1
:
current info: {}
False
[]
current info: {'foo': [1]}
与integer = 2
再次运行此代码:
instance.add_to_info("foo", 2)
current info: {'foo': [1]}
False
[]
current info: {'foo': [2]}
第一次运行明显成功({'foo': [1]}
),但hasattr
返回false,getattr
第二次使用默认空白数组,在此过程中丢失值1
!为什么是这样?
我会被诅咒的!我以为我疯了。我一直使用'if/in/else'结构来处理这些带默认值的字典测试情况。这一次,由于实际情况实际上比我的例子复杂得多,还有其他一些hasattrs飞来飞去,我赞成“语法”,而不是......这显然不起作用!我从现在开始会记住这个问题,谢谢! –
另外,我正在处理init中的信息,只是想简化示例。 –