javascript - 如何使用 bokeh 库(Python + JavaScript)管理错误并将其显示在用户界面上?

标签 javascript python exception bokeh custom-exceptions

我在 Bokeh Server Application 工作使用 Python 库 “Bokeh” 时,我通常会遇到两种类型的错误。

  • Chromium 控制台上的JavaScript 错误
  • 服务器端的
  • Python 错误,它们出现在 Tornado 记录器中。 Bokeh 与 Tornado Web 服务器配合使用

我可以实现的是在 python 中创建继承 Exception 类的手动异常。通过这种方式,我可以编写自定义消息并在此类出现错误时运行一些操作。

class ManualException(Exception):
    def __init__(self, value):
        self.value = value

        # some actions

    def __str__(self):
        return repr(
            'MANUAL ERROR\n' + self.value
        )

但是如果发生任何其他异常,那么我不知道如何捕获它们以运行一些自定义操作。我试过这个:

try:
    n = 9 / 0
except Exception:
    tb = sys.exc_info()[2]
    raise ManualException('ZERO ERROR').with_traceback(tb)

在这里,我必须手动捕获任何错误,并使用我手动创建的类引发它们,然后它们都出现在 python 记录器中。这是执行此操作的正确方法吗?

2017-09-04 17:08:58,872 Error running application handler <bokeh.application.handlers.directory.DirectoryHandler object at 0x0000023E2435C208>: 'MANUAL ERROR\nZERO ERROR'
File "main.py", line 11, in <module>:
n = 9 / 0 Traceback (most recent call last):
File "[...]\main.py", line 11, in <module>
    n = 9 / 0
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "[...]\lib\site-packages\bokeh\application\handlers\code_runner.py", line 125, in run
    exec(self._code, module.__dict__)
File "[...]\main.py", line 14, in <module>
    raise ManualException('ZERO ERROR').with_traceback(tb)
File "[...]\main.py", line 11, in <module>
    n = 9 / 0
exceptions.ManualException: 'MANUAL ERROR\n'ZERO ERROR'

无论如何我想避免这种情况,因为我想向用户显示所有类型的错误,即使我不使用 try-except 来捕获异常也是如此。

另一方面,如果发生 Python 错误,则会显示一条 JavaScript 消息。所以我认为最好的选择是覆盖一些 JavaScript 方法来运行一些自定义的 js 代码。我怎么能做到这一点?这可以实现吗?

enter image description here

最佳答案

我得到了 an answer in other SO question .可以将一些监听器添加到窗口以获取 JavaScript 错误消息

You can handle it as an event listener on window object.

window.onunhandledrejection = function(event) {
  console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};

window.onerror = function(event) {
  console.warn(`UNHANDLED ERROR: ${event.message}`);
};

Or also like this:

 window.addEventListener('error', function(event) { ... })

You can read more about the unhandledrejection event on the MDN web docs here and the onerror event on the docs here

关于javascript - 如何使用 bokeh 库(Python + JavaScript)管理错误并将其显示在用户界面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042148/

相关文章:

python - pytest-mocks 并声明类级别的固定装置

java - 我的代码无限循环并且不再提示用户

c# - 为什么我得到 "The given path' 格式不受支持”错误

java - 默认异常处理程序显式处理异常的首选方法是什么?

javascript - 悬停时的 jQuery 可排序列表句柄

javascript - Charts.js 动态报价

javascript - Dojo.js AMD 加载器 - 类型错误 : can't convert undefined to object

python - formaction 中的插槽验证不起作用

SCSS 中的 Javascript 表达式

javascript - Spark 中的Python mapraduce