def is_collection(obj):
    """ Returns true for any iterable which is not a string or byte sequence.
    """
try:
    if isinstance(obj, str):
        return False
except NameError:
    pass
if isinstance(obj, bytes):
    return False
try:
    iter(obj)
except TypeError:
    return False
try:
    hasattr(None, obj)
except TypeError:
    return True
return False
как сказать, что переменная является итерируемой, но не строкой