龙卷风websocket处理程序未被捕获的例外

时间:2017-03-15 23:58:40

标签: python tornado

我正试图在我的WebSocketHandler中捕获未捕获的异常。但是Tornado的WebSocketHandler没有与HTTP RequestHandler相同的异常处理接口。

在上面的源代码中,看起来似乎捕获并记录了异常:

def _run_callback(self, callback, *args, **kwargs):
    """Runs the given callback with exception handling.

    On error, aborts the websocket connection and returns False.
    """
    try:
        callback(*args, **kwargs)
    except Exception:
        app_log.error("Uncaught exception in %s",
                      self.request.path, exc_info=True)
        self._abort()

有没有更好的方法来捕获WebSocketProtocol中的异常?

而不是破解处理程序和实现上述方法的WebSocketHandler子类化?

1 个答案:

答案 0 :(得分:0)

子类化和覆盖WebSocketProtocol._run_callback是目前从基类执行此操作的最佳方法。但是由于子类和覆盖此方法很麻烦,因此在proper support can be added to the framework之前在应用程序级别处理此问题可能更好。将所有回调包装在一个大的try / except块中,或者如果你有足够的回调,这会让你感到恼火,你可以制作你自己的异常捕获装饰。