diff --git a/IPython/html/services/sessions/handlers.py b/IPython/html/services/sessions/handlers.py
index addfd88..d88aa96 100644
--- a/IPython/html/services/sessions/handlers.py
+++ b/IPython/html/services/sessions/handlers.py
@@ -106,7 +106,11 @@ class SessionHandler(IPythonHandler):
def delete(self, session_id):
# Deletes the session with given session_id
sm = self.session_manager
- sm.delete_session(session_id)
+ try:
+ sm.delete_session(session_id)
+ except KeyError:
+ # the kernel was deleted but the session wasn't!
+ raise web.HTTPError(410, "Kernel deleted before session")
self.set_status(204)
self.finish()
diff --git a/IPython/html/static/base/js/utils.js b/IPython/html/static/base/js/utils.js
index aa85d17..cde25f3 100644
--- a/IPython/html/static/base/js/utils.js
+++ b/IPython/html/static/base/js/utils.js
@@ -523,12 +523,14 @@ define([
var ajax_error_msg = function (jqXHR) {
// Return a JSON error message if there is one,
// otherwise the basic HTTP status text.
- if (jqXHR.responseJSON && jqXHR.responseJSON.message) {
+ if (jqXHR.responseJSON && jqXHR.responseJSON.traceback) {
+ return jqXHR.responseJSON.traceback;
+ } else if (jqXHR.responseJSON && jqXHR.responseJSON.message) {
return jqXHR.responseJSON.message;
} else {
return jqXHR.statusText;
}
- }
+ };
var log_ajax_error = function (jqXHR, status, error) {
// log ajax failures with informative messages
var msg = "API request failed (" + jqXHR.status + "): ";