我需要这样的东西(伪代码):
if hasattr(object, 'detail.infotext')我的意思是,我想检查对象是否有details属性,如果有,那么details是否有一个名为infotext的属性
我可以这样做:
if hasattr(object, 'detail'):
if hasattr(object.detail, 'infotext'):
do something但是一行代码更容易阅读。
发布于 2014-07-16 19:36:26
我知道这并不是您真正想要做的事情,但不管怎样,它更像是pythonic式的(如果您明确知道要查找的属性的名称):
try:
do something with object.detail.infotext
except AttributeError:
do something else发布于 2014-07-16 20:11:48
假设您想实际使用属性值,operator.attrgetter ( Python 2.6+中的)可能也很有用。您仍然需要捕获一个异常,除此之外,它非常简单:
from operator import attrgetter
try:
print attrgetter("detail.infotext")(object)
except:
<handle exception>发布于 2014-07-16 19:32:46
未经过测试,但它应该可以工作:
def hasattrpath(obj, path):
parts = path.split(".")
for part in parts:
if hasattr(obj, part):
obj = getattr(obj, part)
else:
return False
else:
return True但是,除非您的代码库中到处都有这种带有深度嵌套路径表达式的测试,否则jonrsharpe的注释可能是最直接的解决方案。
https://stackoverflow.com/questions/24779483
复制相似问题