I am writing a code which tries to dig deep into the input object and find out a value lying inside that object. Here is a sample code:
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
There are many situations where I end up with these "slanted if conditions". How can I avoid this? This looks dirty and also it is kind of defensive programming.
Using for
loop:
def GetThatValue(inObj):
for i in range(4):
if not inObj:
break # OR return None
inObj = inObj.GetBelowObject()
return inObj
UPDATE
To avoid deeply nested if statements. Check the exceptional case, and return earlier.
For example, following nested if
s:
if a:
if b:
return c
return d
can be transformed to flattened if
s:
if not a:
return d
if not b:
return d
return c
try:
return monkey.TypeWriter().Manufacturer().Shareholders().EthnicDistribution()
except AttributeError:
return None
Try to get the thing. If it doesn't work, you know one of the levels was missing. This works particularly nicely if those GetBelowObject
calls aren't actually all the same method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With