在没有 AttributeError 的情况下获取 class 个成员的值

Get value of class members with out AttributeError

看我的例子

class MyClass1:
    name = 'A'
class MyClass2:
    foo = MyClass1()

obj1 = MyClass2()

如果 obj1fooFalse,下面的代码将产生 AttributeError

print obj1.foo.name

所以我写如下

if obj1:
    if obj1.foo:
        if obj1.foo.name:
            print obj1.foo.name

最好的方法是什么?我可以避免代码中的重复单词吗?

您可以使用 try/except 语法来捕获异常。

try:
    print obj1.foo.name
except AttributeError:
    # do something

您的代码可以简化为两行:

if obj1 and obj1.foo and obj1.foo.name:
    print obj1.foo.name

它逐一检查条件,如果 and 加入的所有条件中的任何一个条件为假,则整个 ... and ... and ... 条件变为假,并且不进一步检查内部条件。

解决此问题的 pythonic 方法是使用 try/execept

try:
   name = obj1.foo.name
except AttributeError:
    # raise error or pass