'Raises ID3JunkFrameError; Returns leftover data'

def _readData(self, id3, data):

    for reader in self._framespec:
        if (len(data) or reader.handle_nodata):
            try:
                (value, data) = reader.read(id3, self, data)
            except SpecError as e:
                raise ID3JunkFrameError(e)
        else:
            raise ID3JunkFrameError('no    data    left')
        self._setattr(reader.name, value)
    for reader in self._optionalspec:
        if (len(data) or reader.handle_nodata):
            try:
                (value, data) = reader.read(id3, self, data)
            except SpecError as e:
                raise ID3JunkFrameError(e)
        else:
            break
        self._setattr(reader.name, value)
    return data
