protected function handleException(\Throwable $e, Request $request) : Response
    {
        // Wrap non HTTP exception/errors
        if (!$e instanceof Exception\Exception) {
            $e = new Exception\UncaughtException($e);
        }
        
        // Throw to an appropriate handler
        $code = $e->getStatusCode();
        if ($this->exceptionHandlers[$code] instanceof ExceptionHandler) {
            return $this->exceptionHandlers[$code]->handle($e, $request);
        } elseif ($this->defaultExceptionHandler instanceof ExceptionHandler) {
            return $this->defaultExceptionHandler->handle($e, $request);
        } else {
            return (new \Circuit\ExceptionHandler\DefaultHandler)->handle($e, $request);
        }
    }