aboutsummaryrefslogtreecommitdiff
path: root/modules/errors.py
diff options
context:
space:
mode:
authorAUTOMATIC <16777216c@gmail.com>2023-06-03 13:55:35 +0300
committerAUTOMATIC <16777216c@gmail.com>2023-06-03 13:55:35 +0300
commit7393c1f99c9e33871e8b4aaad45f2675e7b410af (patch)
treeadda3c265b7307eb3bdab9337620adaadcbed35a /modules/errors.py
parent9d953c0e039cce2c9d8318de9b79a09e243d3e45 (diff)
Added sysinfo tab to settings
Diffstat (limited to 'modules/errors.py')
-rw-r--r--modules/errors.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/errors.py b/modules/errors.py
index e408f500..5271a9fe 100644
--- a/modules/errors.py
+++ b/modules/errors.py
@@ -3,10 +3,30 @@ import textwrap
import traceback
+exception_records = []
+
+
+def record_exception():
+ _, e, tb = sys.exc_info()
+ if e is None:
+ return
+
+ if exception_records and exception_records[-1] == e:
+ return
+
+ exception_records.append((e, tb))
+
+ if len(exception_records) > 5:
+ exception_records.pop(0)
+
+
def report(message: str, *, exc_info: bool = False) -> None:
"""
Print an error message to stderr, with optional traceback.
"""
+
+ record_exception()
+
for line in message.splitlines():
print("***", line, file=sys.stderr)
if exc_info:
@@ -15,6 +35,8 @@ def report(message: str, *, exc_info: bool = False) -> None:
def print_error_explanation(message):
+ record_exception()
+
lines = message.strip().split("\n")
max_len = max([len(x) for x in lines])
@@ -25,6 +47,8 @@ def print_error_explanation(message):
def display(e: Exception, task, *, full_traceback=False):
+ record_exception()
+
print(f"{task or 'error'}: {type(e).__name__}", file=sys.stderr)
te = traceback.TracebackException.from_exception(e)
if full_traceback:
@@ -44,6 +68,8 @@ already_displayed = {}
def display_once(e: Exception, task):
+ record_exception()
+
if task in already_displayed:
return