def lowest_rate(self, carriers=None, services=None):
        carriers = carriers or []
        services = services or []

        lowest_rate = None

        try:
            carriers = carriers.split(',')
        except AttributeError:
            pass
        carriers = [c.lower() for c in carriers]

        try:
            services = services.split(',')
        except __HOLE__:
            pass
        services = [service.lower() for service in services]

        for rate in self.rates:
            rate_carrier = rate.carrier.lower()
            if len(carriers) > 0 and rate_carrier not in carriers:
                continue

            rate_service = rate.service.lower()
            if len(services) > 0 and rate_service not in services:
                continue

            if lowest_rate is None or float(rate.rate) < float(lowest_rate.rate):
                lowest_rate = rate

        if lowest_rate is None:
            raise Error('No rates found.')

        return lowest_rate
dataset/ETHPy150Open EasyPost/easypost-python/easypost/__init__.py/Shipment.lowest_rate