# Buggy code
def _ipython_display_(self):
    try:
        from IPython.display import display
    except ImportError:
        return None

    # Series doesn't define _repr_html_ or _repr_latex_
    latex = self._repr_latex_() if hasattr(self, "_repr_latex_") else None
    html = self._repr_html_() if hasattr(self, "_repr_html_") else None
    table_schema = self._repr_table_schema_()
    # We need the inital newline since we aren't going through the
    # usual __repr__. See
    # https://github.com/pandas-dev/pandas/pull/14904#issuecomment-277829277
    text = "\n" + repr(self)

    reprs = {
        "text/plain": text,
        "text/html": html,
        "text/latex": latex,
        "application/vnd.dataresource+json": table_schema,
    }
    reprs = {k: v for k, v in reprs.items() if v}
    display(reprs, raw=True)


# Traceback (TypeError)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in _convert_can_do_setop(self, other)
2513                 try:
-> 2514                     other = MultiIndex.from_tuples(other)
2515                 except:

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in from_tuples(cls, tuples, sortorder, names)
1128         elif isinstance(tuples, list):
-> 1129             arrays = list(lib.to_object_array_tuples(tuples).T)
1130         else:

TypeError: Argument 'rows' has incorrect type (expected list, got FrozenList)

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
/usr/local/lib/python3.6/site-packages/IPython/core/formatters.py in __call__(self, obj)
880             method = get_real_method(obj, self.print_method)
881             if method is not None:
--> 882                 method()
883                 return True
884

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/core/generic.py in _ipython_display_(self)
138         latex = self._repr_latex_() if hasattr(self, '_repr_latex_') else None
139         html = self._repr_html_() if hasattr(self, '_repr_html_') else None
--> 140         table_schema = self._repr_table_schema_()
141         # We need the inital newline since we aren't going through the
142         # usual __repr__. See

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/core/generic.py in _repr_table_schema_(self)
156         if config.get_option("display.html.table_schema"):
157             data = self.head(config.get_option('display.max_rows'))
--> 158             payload = json.loads(data.to_json(orient='table'),
159                                  object_pairs_hook=collections.OrderedDict)
160             return payload

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/core/generic.py in to_json(self, path_or_buf, orient, date_format, double_precision, force_ascii, date_unit, default_handler, lines)
1232                             force_ascii=force_ascii, date_unit=date_unit,
1233                             default_handler=default_handler,
-> 1234                             lines=lines)
1235
1236     def to_hdf(self, path_or_buf, key, **kwargs):

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/io/json/json.py in to_json(path_or_buf, obj, orient, date_format, double_precision, force_ascii, date_unit, default_handler, lines)
44         obj, orient=orient, date_format=date_format,
45         double_precision=double_precision, ensure_ascii=force_ascii,
---> 46         date_unit=date_unit, default_handler=default_handler).write()
47
48     if lines:

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/io/json/json.py in __init__(self, obj, orient, date_format, double_precision, ensure_ascii, date_unit, default_handler)
141         # TODO: Do this timedelta properly in objToJSON.c See GH #15137
142         if ((obj.ndim == 1) and (obj.name in set(obj.index.names)) or
--> 143                 len(obj.columns &amp; obj.index.names)):
144             msg = "Overlapping names between the index and columns"
145             raise ValueError(msg)

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/base.py in __and__(self, other)
2046
2047     def __and__(self, other):
-> 2048         return self.intersection(other)
2049
2050     def __or__(self, other):

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in intersection(self, other)
2447         """
2448         self._assert_can_do_setop(other)
-> 2449         other, result_names = self._convert_can_do_setop(other)
2450
2451         if self.equals(other):

/Users/kylek/code/src/github.com/pandas-dev/pandas/pandas/indexes/multi.py in _convert_can_do_setop(self, other)
2514                     other = MultiIndex.from_tuples(other)
2515                 except:
-> 2516                     raise TypeError(msg)
2517         else:
2518             result_names = self.names if self.names == other.names else None

TypeError: other must be a MultiIndex or a list of tuples

# Fixed code
def _ipython_display_(self):
    try:
        from IPython.display import display
    except ImportError:
        return None

    # Series doesn't define _repr_html_ or _repr_latex_
    latex = self._repr_latex_() if hasattr(self, "_repr_latex_") else None
    html = self._repr_html_() if hasattr(self, "_repr_html_") else None
    try:
        table_schema = self._repr_table_schema_()
    except Exception as e:
        warnings.warn(
            "Cannot create table schema representation. {}".format(e),
            UnserializableWarning,
        )
        table_schema = None
    # We need the inital newline since we aren't going through the
    # usual __repr__. See
    # https://github.com/pandas-dev/pandas/pull/14904#issuecomment-277829277
    text = "\n" + repr(self)

    reprs = {
        "text/plain": text,
        "text/html": html,
        "text/latex": latex,
        "application/vnd.dataresource+json": table_schema,
    }
    reprs = {k: v for k, v in reprs.items() if v}
    display(reprs, raw=True)