给定以下类(具有错误属性),那么检查该bar
属性是否存在的最佳万无一失的方法是什么?
class Foo(object):
@property
def bar(self):
raise AttributeError('unforeseen attribute error!')
两者都hasattr
失败getattr
并且仅dir
有效:
foo = Foo()
print hasattr(foo, 'bar')
# False
try:
getattr(foo, 'bar')
print True
except AttributeError as e:
print False
# False
print 'bar' in dir(foo)
# True
我能想到的最好的全方位解决方案是:
def robust_hasattr(obj, attr):
return hasattr(obj, attr) or attr in dir(obj)
有没有更好的办法?