У меня проблема с методом open в WebSocketHandler. Я обернул его gen.coroutine для использования асинхронного вызова внутри (получить доступ к Redis). Но появилась другая проблема, никаких ошибок внутри open не ловит.
Пример:
@gen.coroutine
def open(self):
t = 8/0
self._connection_id = yield self._generate_connection_id()
self.write_message('...')
Метод open вызывается внутри WebSocketProtocol._run_callback:
def _run_callback(self, callback, *args, **kwargs):
try:
callback(*args, **kwargs)
except Exception:
app_log.error("Uncaught exception in %s",
self.request.path, exc_info=True)
self._abort()
Этот метод не имеет декоратора, поэтому метод open возвращает будущее, и это исключение не обрабатывается.
Итак, как я могу использовать асинхронный метод внутри open и обрабатывать исключения?