diff --git a/IPython/frontend/html/notebook/handlers.py b/IPython/frontend/html/notebook/handlers.py
index 6c0530d66..4d3c854fa 100644
--- a/IPython/frontend/html/notebook/handlers.py
+++ b/IPython/frontend/html/notebook/handlers.py
@@ -101,10 +101,25 @@ class ZMQStreamHandler(websocket.WebSocketHandler):
"""
idents, msg_list = self.session.feed_identities(msg_list)
msg = self.session.unserialize(msg_list)
- msg['header'].pop('date')
+ try:
+ msg['header'].pop('date')
+ except KeyError:
+ pass
+ try:
+ msg['parent_header'].pop('date')
+ except KeyError:
+ pass
msg.pop('buffers')
return jsonapi.dumps(msg)
+ def _on_zmq_reply(self, msg_list):
+ try:
+ msg = self._reserialize_reply(msg_list)
+ except:
+ self.application.kernel_manager.log.critical("Malformed message: %r" % msg_list)
+ else:
+ self.write_message(msg)
+
class IOPubHandler(ZMQStreamHandler):
@@ -122,10 +137,6 @@ class IOPubHandler(ZMQStreamHandler):
self.iopub_stream.on_recv(self._on_zmq_reply)
self.start_hb(self.kernel_died)
- def _on_zmq_reply(self, msg_list):
- msg = self._reserialize_reply(msg_list)
- self.write_message(msg)
-
def on_close(self):
self.stop_hb()
self.iopub_stream.close()
@@ -186,10 +197,6 @@ class ShellHandler(ZMQStreamHandler):
self.shell_stream = self.application.kernel_manager.create_shell_stream(kernel_id)
self.shell_stream.on_recv(self._on_zmq_reply)
- def _on_zmq_reply(self, msg_list):
- msg = self._reserialize_reply(msg_list)
- self.write_message(msg)
-
def on_message(self, msg):
if len(msg) < self.max_msg_size:
msg = jsonapi.loads(msg)