From d772b4c3da862dc042c1073c25c45dece0908ab2 Mon Sep 17 00:00:00 2001 From: MinRK Date: Fri, 7 Feb 2014 16:51:10 -0800 Subject: [PATCH] catch errors at a lower level in interact for cleaner tracebacks in the interact callback than the fallback case --- IPython/html/widgets/interaction.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/IPython/html/widgets/interaction.py b/IPython/html/widgets/interaction.py index 6c9a811d7..22a0ae4dd 100644 --- a/IPython/html/widgets/interaction.py +++ b/IPython/html/widgets/interaction.py @@ -20,6 +20,7 @@ except ImportError: from IPython.utils.signatures import signature, Parameter from inspect import getcallargs +from IPython.core.getipython import get_ipython from IPython.html.widgets import (Widget, TextWidget, FloatSliderWidget, IntSliderWidget, CheckboxWidget, DropdownWidget, ContainerWidget, DOMWidget) @@ -205,7 +206,14 @@ def interactive(__interact_f, **kwargs): container.kwargs[widget.description] = value if co: clear_output(wait=True) - container.result = f(**container.kwargs) + try: + container.result = f(**container.kwargs) + except Exception as e: + ip = get_ipython() + if ip is None: + container.log.warn("Exception in interact callback: %s", e, exc_info=True) + else: + ip.showtraceback() # Wire up the widgets for widget in kwargs_widgets: