In Python 2, when a property raise a error, hasattr
will ignore this property, returning False
.
class A(object):
@property
def get(self):
raise IOError
class B(object):
@property
def get(self):
return 'get in b'
a = A()
b = B()
print 'a hasattr get: ', hasattr(a, 'get')
# output False in Python 2 (fixed, True in Python 3)
print 'b hasattr get', hasattr(b, 'get')
# output True in Python 2 and Python 3
This bug is fixed in Python3. So if you use Python 2, use
try:
a.get
except AttributeError:
print("no get property!")
or use getattr
instead
p = getattr(a, "get", None)
if p is not None:
print(p)
else:
print("no get property!")