@pior I moved the exception handling from `get_or_cache` to here. Does it make sense? If it is expected that `get_or_cache` returns a CacheResult object, it seems natural to raise an exception when it can't.