def join(iterable, sep=''):
    """
    Creates a string by concatenating the strings in ``iterable``
    
    A TypeError will be raised if there are any non-string values in iterable, including 
    bytes objects. The optional separator is placed between the elements, but by default
    there is no separator.
    
    :param iterable: The iterable of strings to concatenate
    :type iterable:  ``iterable``
    
    :param sep: The separating string
    :type sep:  ``str``
    
    :return: A string which is the concatenation of the strings in iterable. 
    :rtype:  ``str``
    """
    assert isinstance(sep, str), '%s is not a string' % sep
    return sep.join(iterable)
