'It will read single index from index file (ie. generated in :py:meth:`._add_single_index`).
Then it will perform ``exec`` on that code
If error will occur the index file will be saved with ``_broken`` suffix
:param p: path
:param ind: index name (will be joined with *p*)
:returns: new index object'

def _read_index_single(self, p, ind, ind_kwargs={}):

    with io.FileIO(os.path.join(p, ind), 'r') as f:
        name = f.readline()[2:].strip()
        _class = f.readline()[2:].strip()
        code = f.read()
    try:
        obj = compile(code, ('<Index:    %s' % os.path.join(p, ind)), 'exec')
        exec obj in globals()
        ind_obj = globals()[_class](self.path, name, **ind_kwargs)
        ind_obj._order = int(ind[:2])
    except:
        ind_path = os.path.join(p, ind)
        os.rename(ind_path, (ind_path + '_broken'))
        warnings.warn(('Fatal    error    in    index,    saved    as    %s' % ((ind_path + '_broken'),)))
        raise
    else:
        return ind_obj
