que tienen un diccionario que a veces recibe llamadas para llaves inexistentes, por lo que tratar de utilizar hasattr
y getattr
para manejar estos casos:Python's hasattr on list values of dictionaries siempre devuelve 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
La primera vez que esto se ejecuta con integer = 1
:
current info: {}
False
[]
current info: {'foo': [1]}
la ejecución de este código de nuevo con integer = 2
:
instance.add_to_info("foo", 2)
current info: {'foo': [1]}
False
[]
current info: {'foo': [2]}
La primera ejecución es claramente exitosa ({'foo': [1]}
), pero hasattr
devuelve falso y getattr
utiliza la matriz en blanco por defecto la segunda vez, perdiendo el valor de 1
en el proceso. ¿Por qué es esto?
I'll be damned! Pensé que me estaba volviendo loco. Siempre he usado la estructura 'if/in/else' para estas situaciones de prueba de diccionario con valores predeterminados. Esta vez, dado que la situación real es en realidad mucho más intrincada que mi ejemplo, con algunos otros obstáculos volando, preferí esa "sintaxis" ... ¡lo que obviamente no funciona! Lo recordaré de ahora en adelante, ¡gracias! –
Además, estoy tratando con información en init de manera apropiada, solo quería simplificar el ejemplo. –