参见我的例子
class MyClass1:
name = 'A'
class MyClass2:
foo = MyClass1()
obj1 = MyClass2()
如果AttributeError
或obj1
为foo
,则代码下方会生成False
。
print obj1.foo.name
所以我写下面的
if obj1:
if obj1.foo:
if obj1.foo.name:
print obj1.foo.name
最好的方法是什么?我可以避免代码中重复的单词吗?
答案 0 :(得分:2)
您可以使用try/except
语法来捕获异常。
try:
print obj1.foo.name
except AttributeError:
# do something
答案 1 :(得分:1)
您的代码可以简化为两行:
if obj1 and obj1.foo and obj1.foo.name:
print obj1.foo.name
它逐个检查条件,如果and
加入的所有条件都是假的,则整个... and ... and ...
条件会变得虚假,并且不会进一步检查内部条件。
答案 2 :(得分:-2)
解决此问题的pythonic方法是使用try/execept
try:
name = obj1.foo.name
except AttributeError:
# raise error or pass