我在 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 代码。我怎么能做到这一点?这可以实现吗?
最佳答案
我得到了 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 theonerror
event on the docs here
关于javascript - 如何使用 bokeh 库(Python + JavaScript)管理错误并将其显示在用户界面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042148/