example python properties attributes python-2.x hasattr

python - example - hasattr jquery



Python''s hasattr a veces arroja resultados incorrectos (1)

La implementación de hasattr de python2 es bastante ingenua, solo intenta acceder a ese atributo y ver si genera una excepción o no.

Desafortunadamente, esto significa que cualquier excepción no controlada dentro de las propiedades será anulada, y los errores en ese código pueden perderse. Para colmo de males, cuando tiene la excepción, también devuelve una respuesta incorrecta (en este caso, el atributo a.foo existe, por lo que el resultado debería haber sido True todo caso).

En python3.2 +, el comportamiento ha sido corregido:

hasattr(object, name)

Los argumentos son un objeto y una cadena. El resultado es True si la cadena es el nombre de uno de los atributos del objeto, False si no es así. (Esto se implementa llamando a getattr(object, name) y viendo si genera un AttributeError o no).

La solución está aquí , pero desafortunadamente ese cambio no retrocedió.

Si el comportamiento de python2 le causa problemas, considere evitar el uso de hasattr ; en su lugar, puedes usar try / except around getattr , capturando solo la excepción AttributeError y dejando que otros getattr .

¿Por qué hasattr dice que la instancia no tiene un atributo foo ?

>>> class A(object): ... @property ... def foo(self): ... ErrorErrorError ... >>> a = A() >>> hasattr(a, ''foo'') False

Esperaba:

>>> hasattr(a, ''foo'') NameError: name ''ErrorErrorError'' is not defined`