У меня есть словарь, который иногда получает вызовы для несуществующих ключей, поэтому я пытаюсь использовать hasattr
и getattr
для обработки этих случаев:
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
использует пустой getattr
по умолчанию во второй раз, теряя значение 1
в этом процессе! Почему это?