gpt4 book ai didi

Python的字典列表值的hasattr总是返回false?

转载 作者:IT老高 更新时间:2023-10-28 22:25:16 25 4
gpt4 key购买 nike

我有一个字典,有时会收到不存在的键的调用,所以我尝试使用 hasattrgetattr 来处理这些情况:

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 的值!这是为什么呢?

最佳答案

hasattr 不测试字典的成员。请改用 in 运算符,或 .has_key 方法:

>>> example = dict(foo='bar')
>>> 'foo' in example
True
>>> example.has_key('foo')
True
>>> 'baz' in example
False

但请注意,dict.has_key() 已被弃用,PEP 8 样式指南建议不要这样做,并且已在 Python 3 中完全删除。

顺便说一句,使用可变类变量会遇到问题:

>>> class example(object):
... foo = dict()
...
>>> A = example()
>>> B = example()
>>> A.foo['bar'] = 'baz'
>>> B.foo
{'bar': 'baz'}

在你的 __init__ 中初始化它:

class State(object):
info = None

def __init__(self):
self.info = {}

关于Python的字典列表值的hasattr总是返回false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com