1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
from __future__ import annotations
from . import text
class AbortExecutionError(Exception):
@staticmethod
def _strip(txt):
txt = txt or ""
txt = txt[1:] if txt.startswith("\n") else txt
txt = text.indent(txt, pre="")
return txt[:-1] if txt.endswith("\n") else txt
def __init__(
self, message: str, explain: str | None = None, hint: str | None = None
):
self.message = message.strip()
self._explain = explain
self._hint = hint
@property
def explain(self):
return self._strip(self._explain)
@property
def hint(self):
return self._strip(self._hint)
def __str__(self):
result = [self.message]
if self.explain:
result.append(text.indent("\n" + self.explain, pre=" " * 2)[2:])
if self.hint:
result.extend(["\nhint:", text.indent("\n" + self.hint, pre=" " * 2)[2:]])
return "".join(result)
|