from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from typing_extensions import Final class ParseError(Exception): path: Final[str] lineno: Final[int] msg: Final[str] def __init__(self, path: str, lineno: int, msg: str) -> None: super().__init__(path, lineno, msg) self.path = path self.lineno = lineno self.msg = msg def __str__(self) -> str: return f"{self.path}:{self.lineno + 1}: {self.msg}"