try/except in a loop

Jean-Michel Pichavant jeanmichel at sequans.com
Thu May 3 09:27:40 EDT 2012


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:

candidates = [obj for obj in objs if hasattr(obj, 'make') and 
callable(obj.make)]
if candidates:
    candidates[0].make()


JM



More information about the Python-list mailing list