浏览代码

maint: output error traceback to frontend's console

wangweimin 4 年之前
父节点
当前提交
961ab07db0
共有 3 个文件被更改,包括 15 次插入24 次删除
  1. 15 2
      pywebio/session/base.py
  2. 0 11
      pywebio/session/coroutinebased.py
  3. 0 11
      pywebio/session/threadbased.py

+ 15 - 2
pywebio/session/base.py

@@ -1,9 +1,11 @@
 import logging
+import sys
+import traceback
+from collections import defaultdict
 
 import user_agents
 
 from ..utils import ObjectDict, Setter, catch_exp_call
-from collections import defaultdict
 
 logger = logging.getLogger(__name__)
 
@@ -117,7 +119,18 @@ class Session:
         return self._closed
 
     def on_task_exception(self):
-        raise NotImplementedError
+        from ..output import toast
+        from . import run_js
+        logger.exception('Error')
+        type, value, tb = sys.exc_info()
+        lines = traceback.format_exception(type, value, tb)
+        traceback_msg = ''.join(lines)
+        traceback_msg = 'Internal Server Error\n'+traceback_msg
+        try:
+            toast('应用发生内部错误', duration=1, color='error')
+            run_js("console.error(traceback_msg)", traceback_msg=traceback_msg)
+        except Exception:
+            pass
 
     def register_callback(self, callback, **options):
         """ 向Session注册一个回调函数,返回回调id

+ 0 - 11
pywebio/session/coroutinebased.py

@@ -159,17 +159,6 @@ class CoroutineBasedSession(Session):
 
         self._cleanup()
 
-    def on_task_exception(self):
-        from ..output import put_markdown  # todo
-        logger.exception('Error in coroutine executing')
-        type, value, tb = sys.exc_info()
-        tb_len = len(list(traceback.walk_tb(tb)))
-        lines = traceback.format_exception(type, value, tb, limit=1 - tb_len)
-        traceback_msg = ''.join(lines)
-        try:
-            put_markdown("发生错误:\n```\n%s\n```" % traceback_msg)
-        except Exception:
-            pass
 
     def register_callback(self, callback, mutex_mode=False):
         """ 向Session注册一个回调函数,返回回调id

+ 0 - 11
pywebio/session/threadbased.py

@@ -187,17 +187,6 @@ class ThreadBasedSession(Session):
 
         self._cleanup()
 
-    def on_task_exception(self):
-        from ..output import put_markdown  # todo
-        logger.exception('Error in thread executing')
-        type, value, tb = sys.exc_info()
-        tb_len = len(list(traceback.walk_tb(tb)))
-        lines = traceback.format_exception(type, value, tb, limit=1 - tb_len)
-        traceback_msg = ''.join(lines)
-        try:
-            put_markdown("发生错误:\n```\n%s\n```" % traceback_msg)
-        except Exception:
-            pass
 
     def _activate_callback_env(self):
         """激活回调功能