try/except in a loop
Peter Otten
__peter__ at web.de
Thu May 3 09:57:32 EDT 2012
Jean-Michel Pichavant wrote:
> Chris Kaynor wrote:
>> On Wed, May 2, 2012 at 12:51 PM, J. Mwebaze <jmwebaze at 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.
More information about the Python-list
mailing list