In your example, it seems that later attempts should really be nested in previous ones. You just make three separate attempts. They have order, but they do not have to be nested. That way you can just do something like
grokster = None
try:
s = makeSnood(x)
grokster = s.snoodidle()
except ValueError:
pass
if grokster is None:
try:
t = makeTrund(x)
grokster = t.trundle()
except ValueError:
pass
if grokster is None:
try:
d = makeTooDeep(x)
grokster = d.groan()
except ValueError:
pass
if grokster:
return grokster.grok()
else:
return None
"" , , return None - raise GroksterError("Don't know how to make grokster of x").
, , , , , , "" (makeSnood, makeTrund ..) (snoodidle, trundle ..), . , ( ). , , , , (, , ); , "" , .