From 6721e7f2f17b5b9d36391c0969adec5145827a74 2014-01-27 00:21:50 From: MinRK Date: 2014-01-27 00:21:50 Subject: [PATCH] catch NotImplementedError, not NotImplemented in _ipython_display_ --- diff --git a/IPython/core/display.py b/IPython/core/display.py index b1410c4..b871906 100644 --- a/IPython/core/display.py +++ b/IPython/core/display.py @@ -115,17 +115,23 @@ def display(*objs, **kwargs): for obj in objs: - # If _ipython_display_ is defined, use that to display this object. If - # it returns NotImplemented, use the _repr_ logic (default). - if not hasattr(obj, '_ipython_display_') or obj._ipython_display_(**kwargs) is NotImplemented: - if raw: - publish_display_data('display', obj, metadata) - else: - format_dict, md_dict = format(obj, include=include, exclude=exclude) - if metadata: - # kwarg-specified metadata gets precedence - _merge(md_dict, metadata) - publish_display_data('display', format_dict, md_dict) + # If _ipython_display_ is defined, use that to display this object. + display_method = getattr(obj, '_ipython_display_', None) + if display_method is not None: + try: + display_method(**kwargs) + except NotImplementedError: + pass + else: + continue + if raw: + publish_display_data('display', obj, metadata) + else: + format_dict, md_dict = format(obj, include=include, exclude=exclude) + if metadata: + # kwarg-specified metadata gets precedence + _merge(md_dict, metadata) + publish_display_data('display', format_dict, md_dict) def display_pretty(*objs, **kwargs): diff --git a/IPython/core/displayhook.py b/IPython/core/displayhook.py index c7e380b..5fdffba 100644 --- a/IPython/core/displayhook.py +++ b/IPython/core/displayhook.py @@ -241,16 +241,21 @@ class DisplayHook(Configurable): """ self.check_for_underscore() if result is not None and not self.quiet(): - # If _ipython_display_ is defined, use that to display this object. If - # it returns NotImplemented, use the _repr_ logic (default). - if not hasattr(result, '_ipython_display_') or result._ipython_display_() is NotImplemented: - self.start_displayhook() - self.write_output_prompt() - format_dict, md_dict = self.compute_format_data(result) - self.write_format_data(format_dict, md_dict) - self.update_user_ns(result) - self.log_output(format_dict) - self.finish_displayhook() + # If _ipython_display_ is defined, use that to display this object. + display_method = getattr(result, '_ipython_display_', None) + if display_method is not None: + try: + return display_method() + except NotImplementedError: + pass + + self.start_displayhook() + self.write_output_prompt() + format_dict, md_dict = self.compute_format_data(result) + self.write_format_data(format_dict, md_dict) + self.update_user_ns(result) + self.log_output(format_dict) + self.finish_displayhook() def flush(self): if not self.do_full_cache: