Jean-Michel Pichavant wrote: > Chris Kaynor wrote: >> On Wed, May 2, 2012 at 12:51 PM, J. Mwebaze <jmweb...@gmail.com> wrote: >> >>> I have multiple objects, where any of them can serve my purpose.. >>> However some objects might not have some dependencies. I can not tell >>> before hand if the all the dependencies exsit. What i want to is begin >>> processing from the 1st object, if no exception is raised, i am done.. >>> if an exception is >>> raised, the next object is tried, etc Something like >>> >>> objs = [... ] >>> try: >>> obj = objs[0] >>> obj.make() >>> except Exception, e: >>> try: >>> obj = objs[1] >>> obj.make() >>> except Exception, e: >>> try: >>> obj = objs[2] >>> obj.make() >>> except Exception, e: >>> continue >>> >>> The problem is the length of the list of objs is variable... How can i >>> do this? >>> >> >> >> for obj in objs: >> try: >> obj.make() >> except Exception: >> continue >> else: >> break >> else: >> raise RuntimeError('No object worked') >> >> > For the record, an alternative solution without try block:
Hmm, it's not sufficient that the method exists, it should succeed, too. class Obj: def make(self): raise Exception("I'm afraid I can't do that") objs = [Obj()] > candidates = [obj for obj in objs if hasattr(obj, 'make') and > callable(obj.make)] > if candidates: > candidates[0].make() It is often a matter of taste, but I tend to prefer EAFP over LBYL. -- http://mail.python.org/mailman/listinfo/python-list