我正在编写一个代码,它试图深入挖掘输入对象并找出该对象内的值。以下是示例代码:
def GetThatValue(inObj):
if inObj:
level1 = inObj.GetBelowObject()
if level1:
level2 = level1.GetBelowObject()
if level2:
level3 = level2.GetBelowObject()
if level3:
return level3.GetBelowObject()
return None
在很多情况下,我最终会遇到这些“倾斜的条件”。 我怎么能避免这个?这看起来很脏,也是一种防御性的编程。
答案 0 :(得分:9)
使用for
循环:
def GetThatValue(inObj):
for i in range(4):
if not inObj:
break # OR return None
inObj = inObj.GetBelowObject()
return inObj
<强>更新强>
避免深层嵌套的if语句。检查例外情况,并提前返回。
例如,在嵌套的if
之后:
if a:
if b:
return c
return d
可以转换为展平if
s:
if not a:
return d
if not b:
return d
return c
答案 1 :(得分:4)
try:
return monkey.TypeWriter().Manufacturer().Shareholders().EthnicDistribution()
except AttributeError:
return None
尝试得到这个东西。如果它不起作用,你知道其中一个级别缺失。如果那些GetBelowObject
调用实际上并不是完全相同的方法,那么这种方法效果特别好。