<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_from_geo(self, lat, lng, distance, skip_cache=False):
 """ Calls `postcodes.get_from_geo` but checks the correctness of all arguments, and by default utilises a local cache. :param skip_cache: optional argument specifying whether to skip the cache and make an explicit request. :raises IllegalPointException: if the latitude or longitude are out of bounds. :returns: a list of dicts containing postcode data within the specified distance. """

        # remove spaces and change case here due to caching
        lat, lng, distance = float(lat), float(lng), float(distance)
        if distance < 0:
            raise IllegalDistanceException("Distance must not be negative")
        self._check_point(lat, lng)
        return self._lookup(skip_cache, get_from_geo, lat, lng, distance)