Python 中如何确定一个对象是否具有某个属性?

Python hasattr

如何确定对象是否具有某些属性?例如:

>>> a = SomeClass()
>>> a.property
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: SomeClass instance has no attribute 'property'Code language: JavaScript (javascript)

下面介绍三种方式

hasattr():

一般情况下建议使用 hasattr()

if hasattr(a, 'property'):
    a.propertyCode language: JavaScript (javascript)

hasattr 与使用try/except AttributeError相同: hasattr 使用 getattr 手动捕获异常。

try/except AttributeError

try:
    doStuff(a.property)
except AttributeError:
    otherStuff()

if hasattr(a, 'property'):
    doStuff(a.property)
else:
    otherStuff()Code language: PHP (php)

assert

hasattr()可以很好地与assert结合使用(避免不必要的if语句并使代码更具可读性):

assert hasattr(a, 'property'), 'object lacks property' 
print(a.property)Code language: PHP (php)

如果缺少该属性,程序将退出并打印出AssertionError提供的错误消息(object lacks property)。

发表评论