Skip to content

Error API Reference

The structured parser errors are exported from the top-level gmshparser namespace.

gmshparser.errors.GmshError

Bases: Exception

Base class for public gmshparser errors.

Source code in gmshparser/errors.py
class GmshError(Exception):
    """Base class for public gmshparser errors."""

gmshparser.errors.ParseError

Bases: GmshError, ValueError

Base class for malformed or unsupported MSH input.

ParseError remains a :class:ValueError for compatibility with code that caught parser failures before the structured error hierarchy was introduced.

Source code in gmshparser/errors.py
class ParseError(GmshError, ValueError):
    """Base class for malformed or unsupported MSH input.

    ``ParseError`` remains a :class:`ValueError` for compatibility with code that
    caught parser failures before the structured error hierarchy was introduced.
    """

    def __init__(
        self,
        message: str,
        *,
        filename: str | None = None,
        line_number: int | None = None,
        section: str | None = None,
        line: str | None = None,
    ) -> None:
        self.message = message
        self.filename = filename
        self.line_number = line_number
        self.section = section
        self.line = line
        super().__init__(message)

    def __str__(self) -> str:
        location = self.filename
        if location is not None and self.line_number is not None:
            location = f"{location}:{self.line_number}"
        elif location is None and self.line_number is not None:
            location = f"line {self.line_number}"

        if self.section is not None:
            section = f"[{self.section}]"
            location = f"{location} {section}" if location else section

        return f"{location}: {self.message}" if location else self.message

    def with_context(self, context: ParsingContext) -> ParseError:
        """Return the same error type with missing source fields populated."""
        return type(self)(
            self.message,
            filename=self.filename or context.filename,
            line_number=(
                self.line_number
                if self.line_number is not None
                else context.line_number or None
            ),
            section=self.section or context.section,
            line=self.line if self.line is not None else context.line,
        )

filename = filename instance-attribute

line = line instance-attribute

line_number = line_number instance-attribute

message = message instance-attribute

section = section instance-attribute

__init__(message, *, filename=None, line_number=None, section=None, line=None)

Source code in gmshparser/errors.py
def __init__(
    self,
    message: str,
    *,
    filename: str | None = None,
    line_number: int | None = None,
    section: str | None = None,
    line: str | None = None,
) -> None:
    self.message = message
    self.filename = filename
    self.line_number = line_number
    self.section = section
    self.line = line
    super().__init__(message)

__str__()

Source code in gmshparser/errors.py
def __str__(self) -> str:
    location = self.filename
    if location is not None and self.line_number is not None:
        location = f"{location}:{self.line_number}"
    elif location is None and self.line_number is not None:
        location = f"line {self.line_number}"

    if self.section is not None:
        section = f"[{self.section}]"
        location = f"{location} {section}" if location else section

    return f"{location}: {self.message}" if location else self.message

with_context(context)

Return the same error type with missing source fields populated.

Source code in gmshparser/errors.py
def with_context(self, context: ParsingContext) -> ParseError:
    """Return the same error type with missing source fields populated."""
    return type(self)(
        self.message,
        filename=self.filename or context.filename,
        line_number=(
            self.line_number
            if self.line_number is not None
            else context.line_number or None
        ),
        section=self.section or context.section,
        line=self.line if self.line is not None else context.line,
    )

gmshparser.errors.ParsingContext dataclass

Current source location while parsing an MSH stream.

Source code in gmshparser/errors.py
@dataclass(slots=True)
class ParsingContext:
    """Current source location while parsing an MSH stream."""

    filename: str | None = None
    line_number: int = 0
    section: str | None = None
    line: str | None = None

    def copy(self, **changes: object) -> ParsingContext:
        """Return an independent context snapshot with optional replacements."""
        values: dict[str, object] = {
            "filename": self.filename,
            "line_number": self.line_number,
            "section": self.section,
            "line": self.line,
        }
        values.update(changes)
        return ParsingContext(**values)  # type: ignore[arg-type]

filename = None class-attribute instance-attribute

line = None class-attribute instance-attribute

line_number = 0 class-attribute instance-attribute

section = None class-attribute instance-attribute

__init__(filename=None, line_number=0, section=None, line=None)

copy(**changes)

Return an independent context snapshot with optional replacements.

Source code in gmshparser/errors.py
def copy(self, **changes: object) -> ParsingContext:
    """Return an independent context snapshot with optional replacements."""
    values: dict[str, object] = {
        "filename": self.filename,
        "line_number": self.line_number,
        "section": self.section,
        "line": self.line,
    }
    values.update(changes)
    return ParsingContext(**values)  # type: ignore[arg-type]

gmshparser.errors.UnsupportedVersionError

Bases: ParseError

Raised when an MSH version is not supported.

Source code in gmshparser/errors.py
class UnsupportedVersionError(ParseError):
    """Raised when an MSH version is not supported."""

gmshparser.errors.UnsupportedBinaryFormatError

Bases: ParseError

Raised when a binary MSH stream is supplied to the ASCII parser.

Source code in gmshparser/errors.py
class UnsupportedBinaryFormatError(ParseError):
    """Raised when a binary MSH stream is supplied to the ASCII parser."""

gmshparser.errors.UnexpectedEndOfFileError

Bases: ParseError

Raised when an MSH section ends before its declared contents.

Source code in gmshparser/errors.py
class UnexpectedEndOfFileError(ParseError):
    """Raised when an MSH section ends before its declared contents."""

gmshparser.errors.InvalidSectionError

Bases: ParseError

Raised when a section header, record, or end marker is malformed.

Source code in gmshparser/errors.py
class InvalidSectionError(ParseError):
    """Raised when a section header, record, or end marker is malformed."""

gmshparser.errors.InvalidNodeError

Bases: ParseError

Raised when a node record or node block is malformed.

Source code in gmshparser/errors.py
class InvalidNodeError(ParseError):
    """Raised when a node record or node block is malformed."""

gmshparser.errors.InvalidElementError

Bases: ParseError

Raised when an element record or element block is malformed.

Source code in gmshparser/errors.py
class InvalidElementError(ParseError):
    """Raised when an element record or element block is malformed."""

gmshparser.errors.InvalidElementConnectivityError

Bases: InvalidElementError

Raised when element connectivity has an invalid width.

Source code in gmshparser/errors.py
class InvalidElementConnectivityError(InvalidElementError):
    """Raised when element connectivity has an invalid width."""

gmshparser.errors.UnknownElementTypeError

Bases: InvalidElementError

Raised when topology metadata is required for an unknown element type.

Source code in gmshparser/errors.py
class UnknownElementTypeError(InvalidElementError):
    """Raised when topology metadata is required for an unknown element type."""

gmshparser.errors.InvalidMeshError

Bases: ParseError

Raised when parsed sections cannot form a consistent modern mesh.

Source code in gmshparser/errors.py
class InvalidMeshError(ParseError):
    """Raised when parsed sections cannot form a consistent modern mesh."""