diff --git a/IPython/html/widgets/widget.py b/IPython/html/widgets/widget.py
index aaca8c983..6c1f38f48 100644
--- a/IPython/html/widgets/widget.py
+++ b/IPython/html/widgets/widget.py
@@ -426,18 +426,16 @@ class Widget(LoggingConfigurable):
if not hasattr(self, '_comm') or self._comm is None:
self._comm = Comm(target_name=self.target_name)
self._comm.on_msg(self._handle_msg)
- self._comm.on_close(self._handle_close)
-
-
- def _handle_close(self):
- """Called when the comm is closed by the front-end."""
- self._close_communication()
+ self._comm.on_close(self._close_communication)
def _close_communication(self):
"""Closes a communication with the front-end."""
if hasattr(self, '_comm') and self._comm is not None:
- self._comm.close()
+ try:
+ self._comm.close()
+ finally:
+ self._comm = None
def _send(self, msg):