Python 2 中的 hasattr 函式錯誤

在 Python 2 中,當屬性引發錯誤時,hasattr 將忽略此屬性,返回 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

這個錯誤在 Python3 中得到修復。因此,如果你使用 Python 2,請使用

try:
    a.get
except AttributeError:
    print("no get property!")

或者使用 getattr 代替

p = getattr(a, "get", None)
if p is not None:
    print(p)
else:
    print("no get property!")