在没有 AttributeError 的情况下获取 class 个成员的值
Get value of class members with out AttributeError
看我的例子
class MyClass1:
name = 'A'
class MyClass2:
foo = MyClass1()
obj1 = MyClass2()
如果 obj1
或 foo
是 False
,下面的代码将产生 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
看我的例子
class MyClass1:
name = 'A'
class MyClass2:
foo = MyClass1()
obj1 = MyClass2()
如果 obj1
或 foo
是 False
,下面的代码将产生 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