8

我如何评价

a = myobject.id.number

如果 myobject 是,则返回 NoneNone

内置getattr?也许getattr(myobject, "id.number", None)

4

6 回答 6

6
getattr(getattr(myobject, "id", None), "number", None)

应该管用。

于 2013-02-17T19:51:38.197 回答
6

这应该可以很好地扩展到任何深度:

reduce(lambda obj, attr : getattr(obj, attr, None), ("id","num"), myobject)
于 2013-02-17T20:58:28.300 回答
4

我最喜欢的是

from functools import reduce
try:
  a = reduce(getattr, ("id", "number"), myobject)
except AttributeError:
  a = None

或者

from operator import attrgetter
try:
  a = attrgetter('id.number')(myobject)
except AttributeError:
  a = None
于 2018-09-26T19:23:47.910 回答
1

这是一个单行

a = myobject is not None and myobject.id.number or None

它不检查 id 是否为 None,但这不是原始问题的一部分。

于 2013-02-17T20:53:12.893 回答
0

考虑所有成员的稍微过于通用的解决方案:

if myobject and myobject.id and myobject.id.number:
    a = myobject.id.number
else:
    a = None
于 2013-02-17T19:51:04.377 回答
0
return myobject.id.number if myobject else None
于 2013-02-17T20:57:47.977 回答