marduk wrote:
> On Tue, 2005-11-15 at 11:01 -0800, py wrote:
> 
>>I have function which takes an argument.  My code needs that argument
>>to be an iterable (something i can loop over)...so I dont care if its a
>>list, tuple, etc.  So I need a way to make sure that the argument is an
>>iterable before using it.  I know I could do...
>>
>>def foo(inputVal):
>>    if isinstance(inputVal, (list, tuple)):
>>        for val in inputVal:
>>            # do stuff
>>
>>...however I want to cover any iterable since i just need to loop over
>>it.
>>
>>any suggestions?
> 
> You could probably get away with 
> 
> if hasattr(inputVal, '__getitem__')

No, you probably couldn't.

##################
 >>> def g(s):
        for i in xrange(s):
                yield i+s

                
 >>> m = g(5)
 >>> hasattr(m, '__getitem__')
False
###################

I'd do something like:

#####################
def foo(inputVal):
     try:
        iter(inputVal) # Can you change it into an interator?
     except TypeError:
         # Return Error Code
     else:
         for val in inputVal:
             # do stuff
#######################

Again, you'll have to be careful about strings.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to