This is what I normally do in order to ascertain that the input is a list
/tuple
– but not a str
. Because many times I stumbled upon bugs where a function passes a str
object by mistake, and the target function does for x in lst
assuming that lst
is actually a list
or tuple
.
assert isinstance(lst, (list, tuple))
My question is: is there a better way of achieving this?
Python 3:
import collections.abc
if isinstance(obj, collections.abc.Sequence) and not isinstance(obj, str):
print("`obj` is a sequence (list, tuple, etc) but not a string or a dictionary.")
Changed in version 3.3: Moved global namespace of “Collections Abstract Base Classes” from abc
to collections.abc
module. For backwards compatibility, they will continue to be visible in this module as well until version 3.8 where it will stop working.
Python 2:
import collections
if isinstance(obj, collections.Sequence) and not isinstance(obj, basestring):
print "`obj` is a sequence (list, tuple, etc) but not a string or unicode or dictionary."