code: def handle_response(self, ts, resp):
          
          log.info("handle_response: Handling response %s", resp)
          event = resp['event']
          try:
              self._event_handlers[event](ts, **resp)
          # Handle Non-Critical Errors
          except (InvalidChannelError, InvalidPairError, InvalidBookLengthError,
                  InvalidBookPrecisionError) as e:
              log.exception(e)
              print(e)
          except (NotSubscribedError, AlreadySubscribedError) as e:
              log.exception(e)
              print(e)
          except GenericSubscriptionError as e:
              log.exception(e)
              print(e)
  
          # Handle Critical Errors
          except InvalidEventError as e:
              log.critical("handle_response(): %s; %s", e, resp)
              log.exception(e)
              raise SystemError(e)
          except KeyError:
              # unsupported event!
              raise UnknownEventError("handle_response(): %s" % resp)
docs: Passes a response message to the corresponding event handler, and also
          takes care of handling errors raised by the _raise_error handler.
          :param ts: timestamp, declares when data was received by the client
          :param resp: dict, containing info or error keys, among others
          :return: