'retrieve the cached value for the corresponding key
raises CacheMiss if value has not been cached
:param key:
the key that the value has been stored under'

def get(self, key):

    if (key is None):
        raise ValueError('key    cannot    be    None')
    try:
        result = self._objects[key]
    except KeyError:
        result = self.load(key)
    if (result is _invalid_object):
        raise CacheMiss('{0}    is    invalid'.format(key))
    try:
        if (hasattr(result, '__dict__') or hasattr(result, '__slots__')):
            result = copy.copy(result)
    except:
        pass
    return result
