docs: def handle_error(self, e, **kwargs):
          """if an exception is raised while trying to handle the request it will
          go through this method
  
          This method will set the response body and then also call Controller.handle_error
          for further customization if the Controller is available
  
          :param e: Exception, the error that was raised
          :param **kwargs: dict, any other information that might be handy
          """
          req = self.request
          res = self.response
          con = self.controller
  
          if isinstance(e, CallStop):
              logger.info(str(e), exc_info=True)
              res.code = e.code
              res.add_headers(e.headers)
              res.body = e.body
  
          elif isinstance(e, Redirect):
              logger.info(str(e), exc_info=True)
              res.code = e.code
              res.add_headers(e.headers)
              res.body = None
  
          elif isinstance(e, (AccessDenied, CallError)):
              logger.warning(str(e), exc_info=True)
              res.code = e.code
              res.add_headers(e.headers)
              res.body = e
  
          elif isinstance(e, NotImplementedError):
              logger.warning(str(e), exc_info=True)
              res.code = 501
              res.body = e
  
          elif isinstance(e, TypeError):
              e_msg = unicode(e)
              if e_msg.startswith(req.method) and 'argument' in e_msg:
                  logger.debug(e_msg, exc_info=True)
                  logger.warning(
                      " ".join([
                          "Either the path arguments ({} args) or the keyword arguments",
                          "({} args) for {}.{} do not match the {} handling method's",
                          "definition"
                      ]).format(
                          len(req.controller_info["method_args"]),
                          len(req.controller_info["method_kwargs"]),
                          req.controller_info['module_name'],
                          req.controller_info['class_name'],
                          req.method
                      )
                  )
                  res.code = 405
  
              else:
                  logger.exception(e)
                  res.code = 500
  
              res.body = e
  
          else:
              logger.exception(e)
              res.code = 500
              res.body = e
  
          if con:
              error_method = getattr(con, "handle_{}_error".format(req.method), None)
              if not error_method:
                  error_method = getattr(con, "handle_error")
  
              logger.debug("Using error method: {}.{}".format(
                  con.__class__.__name__,
                  error_method.__name__
              ))
              error_method(e, **kwargs)