引发错误并从面板仪表板显示回溯消息

时间:2019-08-03 16:01:05

标签: python bokeh holoviews pyviz holoviz

当我将窗口小部件更新链接到一个函数并在面板中显示输出时,由于将窗口小部件更新为该函数无法处理的值而导致的错误导致该函数以静默方式失败,而不是终止面板的执行,并且显示回溯。

在下面的示例中,x是未定义的,因此当将滑块拖动到5时,该功能将静默失败,并且不会更新输出值。如果将滑块起始值设置为5,则该函数将按预期提高NameError且不会初始化面板。

import panel as pn

pn.extension()
int_slider = pn.widgets.IntSlider(
    name='Integer Slider', value=1, end=5)

@pn.depends(int_slider.param.value, watch=True)
def print_slider_value(slider_value):
    if slider_value <= 4:
        return slider_value
    else:
        return slider_value * x

pn.Column(int_slider, print_slider_value) #.app('localhost:8888')

当窗口小部件值更改导致错误时,我希望引发这些错误,以便清楚何时发生错误以及回溯发生了什么。如何使用面板实现此目的? (我看到this issue在带有管道的调试模式下,但是找不到与面板相似的东西。)

我一直在JupyterLab笔记本中尝试使用以下软件包版本

bokeh       1.2.0
panel       0.6.0
param       1.9.1
IPython     6.5.0
jupyter_client  5.2.3
jupyter_core    4.4.0
jupyterlab  1.0.2
notebook    5.6.0

2 个答案:

答案 0 :(得分:0)

asked this question on the panel issue tracker并收到响应,指出可以在JS控制台中看到错误。在Firefox上,您可以使用class YourService { private $blog,$em; public function __construct(EntityManager $em, EntityManager $blog) { $this->em = $em $this->blog = $blog; } public function test() { //connect to blog $this->blog->getRepository(your_entity::class)->findAll(); //connect to default $this->em->getRepository(your_entity::class)->findAll(); } 打开它,或右键单击->检查元素->控制台。在Chrome浏览器中,它是Ctrl-Shift-k或右键单击->检查->控制台。

This SO answer显示了如何将控制台嵌入到div中,以便可以将其与其他元素一起直接在应用程序中显示。

答案 1 :(得分:0)

嘿,我遇到了类似的问题,并想出了一个“小部件”解决方案来解决这个问题。这个想法是您捕获错误,将其格式化为 html,然后将错误输出到仪表板中已经存在的小部件中。

在下面的示例中,您可以看到我有一个仪表板,它会在按下提交后返回您输入的几乎所有字符串,但字符串“roger”除外。如果在仪表板中输入“roger”,则会直接在笔记本/面板应用程序中向用户显示回溯。

"some value | 1 | 2"

结果是:

enter image description here