2011-01-12 21 views

Respuesta

52

Puede comprobar esto utilizando isinstance y collections.Iterable

>>> from collections import Iterable 
>>> l = [1, 2, 3, 4] 
>>> isinstance(l, Iterable) 
True 
+0

Esto funciona solo para las clases de estilo nuevo y requiere Python 2.6+. –

+0

Solo tenga en cuenta que 'str' también es iterable. Entonces, si estás pensando 'tuple, list, set' ... podría ser mejor simplemente verificar esos 3 tipos – Shaun

3

Prueba este código

def isiterable(p_object): 
    try: 
     it = iter(p_object) 
    except TypeError: 
     return False 
    return True 
5

Usted no se "marca". Asumes.

try: 
    for var in some_possibly_iterable_object: 
     # the real work. 
except TypeError: 
    # some_possibly_iterable_object was not actually iterable 
    # some other real work for non-iterable objects. 

Es más fácil pedir perdón que pedir permiso.

+0

¿No se rompería esto si algo es iterable pero no tiene entradas? P.ej. si desea distinguir una lista y una cadena, no parecería una buena idea tratarla como una cadena solo porque la lista está vacía. –

+0

No estoy de acuerdo con esto. Lo más probable es que quieras hacer 'if not iterable: [obj]' para afirmar que algo es SIEMPRE iterable. Es más probable que haga un código más limpio imo. –

+2

Captura cualquier 'TypeError' en" el trabajo real "sin una forma de distinguir entre los dos. –

Cuestiones relacionadas